一、Object类中的equals方法
所有类都从Object类中继承了equals方法。
Object类中equals方法源代码如下:
public boolean equals (Object obj) { return this == obj; }
Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一个对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true,如果指向的不是同一块内存,则返回false。注意:即使是内容完全相等的两块不同的内存对象,也放回false。
即:如果是同一块内存,则object中的equals方法返回true,如果是不同的内存,则返回false。
如果希望不同内存但相同内容的两个对象equals时返回true,则我们需要重写父类的equals方法。
class A { int i; public A(int i) { this.i = i; } // public boolean equals(Object obj) //如果希望不同内存但相同内容的两个对象equals时返回true,则重写父类的equals // { // A aa = (A)obj; // if(this.i == aa.i) // return true; // else // return false; // } } public class TestEquals_1 { public static void main(String[] args) { A aa1 = new A(3); A aa2 = new A(3); System.out.println(aa1.equals(aa2)); //false } }
String类已经重写了Object中的equals方法。
String类的equals方法是用来判断两个对象的内容是否相等,Object类的equals方法是用来判断两个对象是否是用一个对象。
public class TestEquals_2 { public static void main(String[] args) { String str1 = new String("China"); String str2 = new String("China"); System.out.println(str1.equals(str2)); //true System.out.println(str1 == str2); //false String str3 = "China"; String str4 = "China"; System.out.println(str3.equals(str4)); //true System.out.println(str3 == str4); //ture } }