注意点:
运行结果:
num1 == num2: true
num2.equals(num1): true
num3 == num2 : false
num3.equals(num2): true
运行结果分析:
- 基本类型和封装类型进行"=="比较的时候, 封装类型会自动拆箱, 然后变成基本类型就行比较
- 两个封装类型进行 "=="比较的时候, 判断的是两个对象是否是同一个对象, 所以要用equals就行比较
- 封装类型调用equals方法, 但是参数是基本类型的时候, 会先将基本类型装箱为封装类型
- Boolean, Byte, Character, Short, Integer, Long使用了Java的常量池, 也就是说当数据范围在 -128~127的时候, 会使用缓存,Float和Double没有使用常量池
public static void main(String[] args) {
int num1 = 120;
Integer num2 = new Integer("120");
System.out.println("num1 == num2: " + (num1 == num2));
System.out.println("num2.equals(num1): " + num2.equals(num1));
}
运行结果:
num1 == num2: true
num2.equals(num1): true
缓存源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
- 泛型只能使用封装类型, 而不能使用基本数据类型