Integer ==和 equals的判断区别
public class tests {
Integer a=new Integer(3);
Integer b=new Integer(3);
Integer c=127;
Integer d=127;
Integer e=128;
Integer f=128;
@Test
public void test(){
// ==比较的是内存中的地址相不相等
System.out.println(a==b); //flase
//例如ab都为new出的对象,在内存分配中是不同的内存区域块,所以不同
System.out.println(c==d); //true
//因为Integer在内存中有一个-127-127的一个缓存区(常量池)
//在这个范围内的数直接取常量池的数据,所以cd的地址是一样的
System.out.println(e==f); //false
//而ef超过了常量池的区域,所以需要单独的去创建内存区域,所以地址不一样
// equals比较的是内存地址里的值相不相等
System.out.println(a.equals(b)); //true
System.out.println(c.equals(d)); //true
System.out.println(e.equals(f)); //true
}
}
false
true
false
true
true
true