一,基本数据类型
1, 基本类型没有equals方法,使用 ‘== ’比较
2,‘==’ 比较的是两个基本类型的值。
二,引用类型
1)未重写equals方法时,equals方法和‘==’均是比较的内存地址【不管是否重写了hashcode方法】
实验例子:
PeoPle 类:
public class PeoPle {
private static final int num = 1;
@Override
public int hashCode() {
return num;
}
}
测试主函数:
public class Test {
public static void main(String[] args) {
PeoPle peoPle = new PeoPle();
PeoPle peoPle2 = new PeoPle();
PeoPle peoPle3 = peoPle;
System.out.println(peoPle.hashCode());
System.out.println(peoPle2.hashCode());
System.out.println(peoPle3.hashCode());
System.out.println("==号比较不同对象结果:"+(peoPle == peoPle2));
System.out.println("==号比较相同对象结果:"+(peoPle == peoPle3));
System.out.println("equals比较不同对象结果:"+peoPle.equals(peoPle2));
System.out.println("equals比较相同对象结果:"+peoPle.equals(peoPle3));
}
}
输出结果:
1
1
1
==号比较不同对象结果:false
==号比较相同对象结果:true
equals比较不同对象结果:false
equals比较相同对象结果:true
分析:虽然,重写了hashcode方法,使得三个类的hashcode都相同,但是,新建类的内存地址不同,所以导致比较结果的差异,所以,他们在比较的时候,并不是比较的hash值。
2)String类型重写了equals方法之后 的比较结果。
结论:‘==’号依然比较的是内存地址,而equals方法,则比较的是值。
举个例子:
public class Test {
public static void main(String[] args) {
String string = new String("a");
String string2 = new String("a");
System.out.println("equals方法比较结果:"+string.equals(string2));
System.out.println("==号比较结果:"+(string == string2));
}
}
输出结果:
equals方法比较结果:true
==号比较结果:false
注意:此处String采用new的方式,采用‘=’号赋值的方式,结果会不同。
举个例子:
public class Test {
public static void main(String[] args) {
String string = new String("a");
String string2 = new String("a");
System.out.println("--------new String 赋值的方式--------");
System.out.println("equals方法比较结果:"+string.equals(string2));
System.out.println("==号比较结果:"+(string == string2));
System.out.println("--------=号赋值的方式----------------");
String string3 = "a";
String string4 = "a";
System.out.println("equals方法比较结果:"+string3.equals(string4));
System.out.println("==号比较结果:"+(string3 == string4));
}
}
输出结果:
--------new String 赋值的方式--------
equals方法比较结果:true
==号比较结果:false
--------=号赋值的方式----------------
equals方法比较结果:true
==号比较结果:true
分析:‘=’ 号赋值的方式,如果对象池中,已经有了相同的字符串声明式,就不会再分配空间了。所以,使用‘=’号赋值,String对象是指向同一个内存空间
参考博客地址:https://blog.csdn.net/u014253480/article/details/50420098