一、自动类型转换
1、小范围到大范围可以自动类型转换
2、整形到浮点型可以自动类型转换
3、在范围内的字面量
1、小范围到大范围可以自动类型转换
short 与char范围有交集
3、在范围内的字面量
固定不变的量,可以理解为常量是字面量。
byte b = 12;
b为byte类型,12为int类型。因为12是字面量,在范围byte(-128~127)内,所以自动转换成byte类型。
二、强制类型转换
除了上面3中自动类型转换,其他的全部是强制类型转换。
2.1 数据相加,小范围的变成大范围的。
byte a + byte b,结果是int类型,byte类型会报错,这里需要强转。
int + long,结果为long
long e = 12;
int f = 13;
long l = e + f;
2.2 强制类型转换,造成数据精度丢失
强制类型转换要慎用,容易造成数据精度丢失
byte g = (byte) 128;
System.out.println("g = " + g);
g = -128
在二进制计算中,余码 、遗码计算
余码计算:
正数直接搬下来,负数取反+1。
byte g = (byte)128;
int 类型,32位,128,00000000000000000000000100000000
转成byte类型,8位。32位转8位,剩下的24位,放不下,需要丢弃掉,只能保留8位,所以转成byte类型就是8位的 100000000。
最高位是符号位,0表示正数,1表示负数。 这里100000000,最高位1(第8位)表示负数。
为负数时,符号后面的数需要取反然后+1,00000000 (第一位到第七位)取反就是1111111,值为127,再加1为128。我们最高位为1,代表负号,所以最终得出来的值为-128.
三、基本数据类型的封装类
3.1 封装类的常量池
封装类的常量池范围,为-128~127。在这个范围内,物理地址是一样的,超了这个范围,物理地址是不一样的。
Integer a = 127;
Integer b = 127;
System.out.println(a==b);
结果为true
Integer a = 128;
Integer b = 128;
System.out.println(a==b);
结果为false
3.2 常用方法
将字符串类型转成int类型
String id = "1234";
int i = Integer.parseInt(id);
3.3 封装类的使用场景
在定义年龄类型的时候,一般使用Integer类型,而不是int类型。
Integer age1;
int age2;
Integer默认数据为null,int默认为0 。在表示年龄的时候,null可能会有特殊的含义。