1.1 为什么要装箱?
在Java中,有些场景只能使用对象,例如:
- 集合框架:如
ArrayList
、HashMap
等,只能存储对象,不能直接存储基本类型。 - 泛型:泛型类型也只能使用对象类型。
装箱和拆箱使得基本类型和对象类型之间的转换变得更加方便和灵活,提高了代码的可读性和可维护性。
1.3 自动装箱和自动拆箱
手动装箱: Integer ii = Integer.valueOf(10);
自动装箱: Integer ii = 10;
手动拆箱: int a = ii.intValue();
自动拆箱: int a = ii;
1.4 问题
public class AutoBoxingExample {
public static void main(String[] args) {
Integer a = 100; // 自动装箱,将int 100装箱为Integer对象
Integer b = 100; // 自动装箱,将int 100装箱为Integer对象
if (a == b) {
System.out.println("a和b相等"); // 输出:a和b相等
} else {
System.out.println("a和b不相等");
}
Integer c = 1000; // 自动装箱,将int 1000装箱为Integer对象
Integer d = 1000; // 自动装箱,将int 1000装箱为Integer对象
if (c == d) {
System.out.println("c和d相等");
} else {
System.out.println("c和d不相等"); // 输出:c和d不相等
}
}
}
解释:
- 当
Integer
值在-128
到127
范围内时,Java会缓存这些值,因此a == b
为true
。 - 但是,超过这个范围的值会创建新的对象,因此
c == d
为false
。