- 装箱和拆箱的概念
- valueOf
- ==运算符和equals函数
- 装箱:将基本类型用包装器类型包装起来
- 拆箱:将包装器类型转换为基本类型
Integer a = 100; Integer b = 100; Integer c = 128; Integer d = 128; System.out.println(a == b); // true System.out.println(c == d); // false
其实,Integer方法中的valueOf方法:
public static Integer valueOf(int i){
if(i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
当不满足条件时,会重新创建一个对象返回,故结果必然不相等。
- valueOf方法在创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用,否则创建一个新的Integer对象。
- Double类型中的valueOf方法,每次返回都是重新new的对象。
- Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现类似。
- Double、Float的valueOf方法的实现类似。
- Boolean的True和False是两个静态成员属性。
Integer i = new Integer(xxx)会触发自动装箱,而Integer i = xxx不会。
- ==运算符的两个操作数都是包装器,则比较是否指向同一对象,如果有一个操作数是表达式(包括算数运算)则比较的是数值(会触发自动拆箱)。
- equals会先触发自动拆箱,再触发自动装箱过程。
- int == Integer进行比较时,Integer会先拆箱再比较。
- integer1 == integer2 进行比较时,由于都是通过new创建,故存放位置不同,因此为false。
上一篇:001隐式(自动)类型转换和显示(强制)类型转换
❤️这里是 三千步, 让我们一起学习进步~❤️



