1.第一题,判断输出结果:
public class Demo1 {
/**
* @param args
* 和String的对象池一样,几种整数基本类型的包装类型也有对象池机制。
也就是说用Integer int1 = 30;这种方式声明一个Integer对象时会先在对象池中找有没有值为30的对象,
如果有直接拿来用,如果没有则重新创建一个对象放入对象池中。java中“==”是比较值,
int1和int2引用的同一个对象,内存地址相同,所以int1==int2结果为true。
而Integer int4 = new Integer(30);这种方式是重新创建一个Integer对象,不会放入对象池中,
所以int4和int5是两个不同对象的引用int4==int5结果为false。
至于int4==int5+int6,因为涉及到运算,所以都是取的各个Integer对象的intValue,
也就是比较的30==30+0,所以为true。
另外补充一点,对象池中对象的值的在[-128,127]之间,超过此范围的不会在对象池中缓存。
也就是说Integer int7 = 130;Integer int8 = 130;判断int7==int8,结果为false。
*/
public static void main(String[] args) {
// Integer int1 = 30;
// Integer int2 = 30;
Integer int1 = 128;
Integer int2 = 128;
Integer int3 = 0;
System.out.println(int1 == int2);
System.out.println(int1 == int2 + int3);
Integer int4 = new Integer(30);
Integer int5 = new Integer(30);
Integer int6 = new Integer(0);
System.out.println(int4 == int5);
System.out.println(int4 == int5 + int6);
}
}