Java整数基本类型几个注意点
- Java中任何一个 整数型字面量 都会默认被当作int处理
int a = 100;
(=是赋值运算符,=右边先执行
程序先执行右边,分配一块空间去存储100这个数字,给100分配的是四个字节(当作int处理)
a变量也是int类型,所以不存在类型转换)
- 如果整形字面量后面添加L或者l,那么这个整形字面量就会被当作long类型来处理了
long b = 100;
(程序先执行右边,分配一块空间去存储100这个数字,给100分配的是四个字节(当作int处理)
b变量是long类型,所以存在自动类型转换)
long c = 100L; (100L指定了long类型,所以直接分配了八个字节不存在类型转换)
long d = 2147483647; (int类型最大值) 直接当作int类型处理,存在自动类型转换
long e = 2147483648; (超过int范围) 整数太大不能当作int类型处理了,编译报错
3.当一个整数型字面量没有超过byte的取值范围的时候,可以直接赋值给byte类型的变量不需要强制类型转换
eg: byte a = 1 可以编译通过
byte b = (byte)128 强制类型转换,会有精度丢失
4.当一个整数型字面量没有超过short的取值范围的时候,可以直接赋值给short类型的变量不需要强制类型转换
5.当两个int类型的数据进行运算之后,结果还是int类型
6.多种数据类型在混合运算的时候,先各自转换成最大的数据类型,再做运算
byte x = 1;
short y = 1;
int z = 1;
int res = x + y + z;
7.byte和short混合运算的时候,各自先转换成int再做运算
eg: byte + byte --> int
short + byte --> int
short + short --> int
编译优化 10 / 3 在编译阶段会直接计算出结果是3
byte a = 10 / 3;
byte b = 10;
byte c = 3;
byte d = b / c;
注意 byte d = b / c; 编译报错,因为第3条使得 b / c结果为int类型 但是接收用的是byte类型需要强制转换类型