1 " == "用于基本类型比较的是变量值是否相等
a = 1;
b = 1;
System.out.print(a == b);
输出为:true
2 " == " 用于引用类型,是比较两个引用是否指向同一块内存地址
Test test1 = new Test();
Test test2 = new Test();
System.out.print(test1 == test2);
输出为:false
3 equals不能用于基本类型的比较,只能用于引用类型之间的比较,在该类没有重写equals方法的时候,所有类都是继承自Object类的equals方法,此时euqals和==等价,就是比较两个引用是否指向堆内存中同一块地址。
Test test1 = new Test();
Test test2 = new Test();
System.out.print(test1.equals(test2));
输出为:false
Obejct类中equals源码
public boolean equals(Object obj) {
return (this == obj);
}
4 基本类型和String、Date类重写了Object的equals方法
String s1 = new String();
String s2 = new String();
System out println(s1==s2);
输出结果:false
System.out.println(s1.equals(s2);
输出结果:true
String类中的equals方法源码
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;
}