Integer与Integer比较的时候,由于直接赋值的时候会进行自动的装箱,那么这里就需要注意两个问题,一个是-128<= x<=127的整数,将会直接缓存在IntegerCache包装类缓冲区中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象。当大于这个范围的时候,直接new Integer来创建Integer对象。 new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。那么Integer a = 128, 大于该范围的话才会直接通过new Integer(128)创建对象,进行装箱。
Integer i1 = new Integer ( 127 ) ;
Integer i2 = new Integer ( 127 ) ;
因为
System. out. println ( i1 == i2) ;
System. out. println ( i1. equals ( i2) ) ;
System. out. println ( "-----------" ) ;
Integer i3 = new Integer ( 128 ) ;
Integer i4 = new Integer ( 128 ) ;
System. out. println ( i3 == i4) ;
System. out. println ( i3. equals ( i4) ) ;
System. out. println ( "-----------" ) ;
Integer i5 = 128 ;
Integer i6 = 128 ;
System. out. println ( i5 == i6) ;
System. out. println ( i5. equals ( i6) ) ;
System. out. println ( "-----------" ) ;
Integer i7 = 127 ;
Integer i8 = 127 ;
System. out. println ( i7 == i8) ;
System. out. println ( i7. equals ( i8) ) ;