个人理解,如有错误,欢迎指正,谢谢。
1.基本类型 和 封装类型 运算或比较 时,
例如 int+Integer或 boolean&Boolean,特别是经常出现的 int==Integer
java都会先将封装类型 拆箱,再进行运算,而拆箱 是调用“基本类型 Value() ” 函数,所以如果封装类型为null时会报 空指针异常 NullPointerException,就是因为调用了函数。
2.因为上述大部分类型对于数值的缓存,所以 封装类的使用上,例如
Integer a = 127, b = 127;
Integer a1 = 128, b1 = 128;
System.out.println(a == b); //TRUE
System.out.println(a1 == b1);//FALSE
Character a = 127, b = 127;
Character a1 = 128, b1 = 128;
Character a2 = (char)-1, b2 = (char)-1;
System.out.println(a == b);//TRUE
System.out.println(a1 == b1); //FALSE
System.out.println(a2== b2); //FALSE
都一样,是这个性质,因为都是调用的“封装类.valueOf”方法返回的对象,而这个对象 在缓存中有时,会返回缓存对象。
Boolean 和 Byte特别在 他们所i有的值 都在缓存中有。
Character 有意思在,虽然负数也在该范围内,但没缓存,可能是 用不到
2. byte,char,short,Int,long之间的转换
低 位数 到 高 位数 转换 没问题
从高位 到 低位 转换 就是 直接取 低位
例如 long 转int 就是 取long的低32位作为 int的值,这时 如果 低 32位的 第一个二进制是1,那转为int就是 负数