== 比较:
1、基本类型比较,只比较值是否相等,值相等,永远为true
例: int i = 123;
int j = 123;
System.out.println(i==j); 结果为:true
2、new包装类型比较,是不同的两个对象,肯定为false
例: Integer i = new Integer(123);
Integer j = new Integer(123);
System.out.println(i==j); 结果为false
有一种特殊情况: int i = new Integer(123);
int j = new Integer(123);
Integer k = new Integer(123);
System.out.println(i==j);
System.out.println(i==k); 结果都为:true(由此判断,存在类型转换的情况下,按照转换后类型比较)
3、非new包装类型比较,在-128-127范围内,值相等结果为true,否则为false
例: Integer i = 123;
Integer j = 123;
System.out.println(i==j); 结果为:true
Integer k = 128;
Integer m = 128;
System.out.println(k==m); 结果为:false
4、int和integer(无论new或非new)比较,结果都为true,因为Integer会自动拆箱为int,其实就是相当于两个int类型比较
例: int i = 123;
Integer j = 123;
Integer k = new Integer(123);
System.out.println(i==j);
System.out.println(i==k); 结果都为:true
5、new包装类型和非new包装类型比较,结果都为false,因为它们存放内存的位置不一样
例: Integer i = 123;
Integer j = new Integer(123);
System.out.println(i==j); 结果为:false
equals比较:
基本类型的包装类都重写了equals方法,例如Integer类
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
所以包装类的equals比较,无论是 new 还是 非new的,首先比较类型是否相等,类型不等直接返回false,类型相等转换成基本类型进行==比较,也就是值比较
举个栗子叭: Integer i = new Integer(321);
Integer j = new Integer(321);
Integer k = 321;
System.out.println(i.equals(j));
System.out.println(i.equals(k)); 结果都为:true