判断以下程序打印的结果:
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);
//false,==好判断的是地址值,i1和i2的在内存中开辟了两个内存空间,地址值不同
System.out.println(i1.equals(i2));
//true,equals方法比较的是内容,i1和i2内容相同
System.out.println("-----------");
Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);
//false,同i1和i2,两者地址值不同
System.out.println(i3.equals(i4));
//true,同i1和i2,两者内容相同
System.out.println("-----------");
Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);
//true,在byte范围内,同时没有用new创建对象,自动装箱就不会新创建对象,而是从常量池中获取
System.out.println(i5.equals(i6));
//true,同i1和i2,两者内容相同
System.out.println("-----------");
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);
//false,超过了byte取值范围就会再新创建对象
System.out.println(i7.equals(i8));
//true,同i1和i2,两者内容相同
总结:-128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取
如果超过了byte取值范围就会再新创建对象 |
|