一、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
}
}