==
- == 比较基本数据类型时,比较的是他们的值是否相同。
- 比较引用数据类型则会比较所指向对象的地址是否相同。
public static void main(String[] args) {
int i1 = 22;
int i2 = 22;
System.out.println(i1 == i2);//true
Integer in1 = 356;
Integer in2 = 356;
System.out.println(in1 == in2);//false
/**
* 因为常量池对于-128到127之间的数进行了缓存,Integer in3 = 127时会放入缓存,
* 当Integer in4 = 127时则直接会从缓存当中直接获取,就不会new了,因此地址值相同,所以为true。
*/
Integer in3 = 127;
Integer in4 = 127;
System.out.println(i1 == i2);//true
int i = 13;
Integer in = 13;
System.out.println(i == in);//true 因为Integer与int比较时,Ingeger都会自动拆箱。
Integer i5 = new Integer(12);
Integer i6 = new Integer(12);
System.out.println(i5 == i6);//false 对象不同。
}
equals
- equals不可以用来比较基本数据类型
Object类中的equals
实质上还是使用的是 == 进行比较。
public boolean equals(Object obj) {
return (this == obj);
}
String类中的equalsS
String类对Object类当中的equals
方法进行了重写,因此,该方法才具备了比较String
内容的功能,而不是去比较内存地址值是否相同。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
总结
==
比较基本数据类型时比较的是值是否相同,而比较引用数据类型时则比较的是引用对象的内存地址值是否相同。- 使用
equals
比较引用数据类型时,如果不对equals
进行重写,则还是比较的对象的内存地址值是否相同;只有对equals
方法进行自己需要的规则进行重写后才会比较内容是否相同。 equals
不能比较基本数据类型。