开发者学堂课程【【名师课堂】Java 零基础入门:Java 数据类型划分(整型类型)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/370/detail/4405
Java 数据类型划分(整型类型)
内容简介:
一、整型类型
二、byte 类型
一、整型类型
1、在 Java 程序里面任何一个整数的常量类型都是 int 型
范例:
public class Test Demo {
public static void main (String args [ ]) {
int num = 10 ;
}
}
10 是一个整数,不会改变的数据都是常量;
程序之中任何一个整数对应的类型都是 int
System .out.println(num * 2);
声明一个 int 型变量
num 是 int 型的变量 *2是 int 型的常量=结果是 int 型
2、观察数据溢出操作
在进行整型数据操作过程中,也会出现数据溢出问题—指的是当已经达到整型的最大或最小值,如果继续进行数学计算而可能产生的错误数据。
(1)关于变量的命名要求:第一个单词的字母小写,而后每个单词的首字母大写(例如 maxValue)
(2)范例:(观察数据溢出操作)
public class Test Demo {
public static void main (String args [ ]) {
int maxValue = Integer.MAX_VALUE ; 取得最大值
int minValue = Integer.MIN_VALUE ; 取得最小值
System.out.println(maxValue) ; 2147483647
System.out.println(minValue) ; -2147483648
maxValue 属于 int 型变量 + int 型常量 = int 型
System.out.println(maxValue + 1) ;数据溢出(最小值):-2147483648
System.out.println(minValue - 1) ;数据溢出(最大值):2147483647
System.out.println(minValue - 2) ;2147483646
}
}
3、使用 long 来解决 int 的数据溢出问题
发现已经超过数据类型的局限,数据的计算就会出现偏差,所以一定要在操作前预估数据大小。
但是问题是,既然已经知道 int 会存在溢出问题,就要解决溢出问题。解决方案只有一个:更换更大的数据类型,比 int 更大的数据类型就是 long 类型。
范例(使用 long 来解决 int 的数据溢出问题):
在使用此类方式处理之前请注意一个问题,所有程序的执行顺序都是由等号的右边到左边,如果继续使用 int 进行计算结果依然会有溢出,所以最简化的做法是将其中的一个变量首先做类型的扩充,而扩充有两种实现方式:
(1)实现方式一:直接将 int 变量的内容复制给 long 变量
public class Test Demo {
public static void main (String args [ ]) {
int maxValue = Integer.MAX_VALUE ; 取得最大值
int minValue = Integer.MIN_VALUE ; 取得最小值
long result = maxValue ; 将 int 的数据变量赋值给 long
result 是 long 类型 + 1是 int 类型 = long 类型
(当数据分为小的类型和数据范围大的类型一起进行计算时,数据范围小的要首先变为数据范围大的类型,统一后进行计算)
System.out.println(result) ; 2147483648
}
}
(2)实现方式二:直接将某一个 int 型变量变为 long 型
public class Test Demo {
public static void main (String args [ ]) {
int maxValue = Integer.MAX_VALUE ; 取得最大值
int minValue = Integer.MIN_VALUE ; 取得最小值
先将 int 型变为 long 型 + 1是 int 型常量 = long 类型
long result = (long) maxValue + 1 ;
System.out.println(result) ; 2147483648
}
}
4、数据类型强制转换
数据类型除了可以由小变大之外也可以由大变小。但问题是会丢失内容
范围小的数据类型可以自动变为范围大的数据类型
数据范围大的数据类型只有强制转换才可以变为数据范围小的数据类型(但是一般不需要应用,99% 情况下提供的数据类型是恰好的)
范例(数据类型强制转换):
public class Test Demo {
public static void main (String args []) {
任何的整数默认类型都是 int ,但是该数据已经超过了 int 可以保存的数据范围,就需要将此数据明确表示为 long 型常量。
long num = 2147483648L ; L 或 l都可以
在强制的时候设置其目标类型,但这种操作有可能会丢失精度
int result = (int)num ;
大的类型变为小的类型,必须强制
数据类型除了可以由小变大之外也可以由大变小。但问题是会丢失内容
范围小的数据类型可以自动变为范围大的数据类型
数据范围大的数据类型只有强制转换才可以变为数据范围小的数据类型(但是一般不需要应用,99%情况下提供的数据类型是恰好的)
范例(数据类型强制转换):
之间讲过所有数据类型都有其默认值,但是这个默认值在方法的说明(主方法)中无效
范例(观察一个错误程序):
任何的整数默认类型都是 int ,但是该数据已经超过了 int 可以保存的数据范围,就需要将此数据明确表示为 long 型常量。
long num = 2147483648L ; L 或 l都可以
在强制的时候设置其目标类型,但这种操作有可能会丢失精度
int result = (int)num ; 大的类型变为小的类型,必须强制
System.out.println(result) ; -2147483648
}
}
此时有两种解决方案,一种是在使用前进行赋值,另外一种是在定义变量时进行赋值
5、重要说明(关于数据类型默认值问题):
之间讲过所有数据类型都有其默认值,但是这个默认值在方法的说明(主方法)中无效
范例(观察一个错误程序):
public class Test Demo {
public static void main (String args []) {
int num ; 定义一个num变量
System.out.println(num) ; 错误:可能尚未初始化变量num
}
}
此时有两种解决方案,一种是在使用前进行赋值,另外一种是在定义变量时进行赋值
范例(在使用前为变量赋值):
public class Test Demo {
public static void main (String args []) {
int num ; 定义一个num变量
num = 10 ; 在num输出之前为变量设置内容
System.out.println(num) ;
}
}
但是这种形式在老版本的 JDK 之中也会出现错误所以最保险的做法就是在变量声明的时候设置其默认值
public class Test Demo {
public static void main (String args [ ]) {
int num =10 ; 在num输出之前为变量设置内容
System.out.println(num) ;
}
}
而对于各个数据类型默认值的使用,需要结合到类的情况下才可以观察到。标准做法为,所有程序在编写变量时都赋上默认值
二、byte 数据类型
byte 类型可以保存的范围:-128~127
范例(声明 byte 变量):
public class Test Demo {
public static void main (String args [ ]) {
10是 int,int 范围大于 byte 范围,理论上需要进行强制转换。
但是在这里没有转换,因为其数据量符合 byte 要求
byte data = 10 ; 10是int类型在byte范围内
System.out.println(data) ;
}
}
如果为 byte 赋值内容大于 byte 范围时才需要强制转换。
同时需要注意的是,如果要将 int 常量直接赋值给 byte 变量,就只能是常量而不能是 int 变量。
public class Test Demo {
public static void main (String args [ ]) ;
byte data = (byte)num ;
System.out.println(data) ;
}
}
在以后的开发中,byte 和 int 经常会一起出现,需要手动进行转换