| 内存中的方法区中有个常量池,为了节省资源,避免每次都要重新创建对象,而数据的最小存储单位是字节,在常量池中有26个英文字母及127以下的数,为了方便使用,直接赋值的话,会从常量池中直接获取该值,以减少因创建对象而造成的内存使用浪费.所以看下面的注释 public class IntegerTest
 {
 public static void main(String[] args)
 {
 // 定义两个Integer类型的数据
 // true,false
 Integer i1 = 128;//new Integer(128);
 Integer i2 = 128;//new Integer(128);
 // Integer类型重写了equals方法,比较的是值
 System.out.println("i1 equals i2 :" + i1.equals(i2));
 System.out.println("i1 == i2 :" + (i1 == i2));
 
 // true,true
 Integer i3 = 127;
 Integer i4 = 127;
 System.out.println("i3 equals i4 :" + i3.equals(i4));
 System.out.println("i3 == i4 :" + (i3 == i4));//这里用==比较的是地址值,都是从常量池中获取的127,所以地址值相同,输出true
 }
 }
 |