内存中的方法区中有个常量池,为了节省资源,避免每次都要重新创建对象,而数据的最小存储单位是字节,在常量池中有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
}
} |