Integer num3 = 128;
Integer num4 = 128;
num3 == num4 (true or false?)
Integer num1 = 1;
Integer num2 = 1;
num1 == num2 (true or false?)
第一题答案是false
第二题答案是true
Integer内部定义了一个内部类,有一个integer类型数组,存放了-128到+127的数(因为这是我们经常使用的数,该内部类提前为我们存放了这些数),当我们自动装箱时,如果数在-128到+127范围内,那么就直接往数组中取数,如果是在范围之外,那么就new 一个对象
所以,
Integer num1 = 1;
Integer num2 = 1;
num1 == num2 的值为true,因为他们的地址值相等,都取之同一个地址上的数。
所以,
Integer num3 = 128;
Integer num4 = 128;
num3 == num4 的值为false,因为超出了范围,所以new了对象,其实他们是不同的对象,所以地址不相等,所以值为false
具体查阅源代码