equals方法是object类提供的一个实例方法。所以所有引用变量都可以调用该方法来判断是否与其他引用变量相等。但是这个方法判断两个对象相等的标准与==没有区别,都要求两个引用变量指向同一个对象时才返回true。所以object提供的equals方法没有太大的实际意义。这就产生了重写 equals 方法。关于如何重写equals()方法,这里先不做介绍。
有些人提出质疑,说String的很多变量都可以用equals方法比较是否相等。 那是因为String已经重写了object的equals方法。String的equals()方法判断两个字符串是否相等的标准是:只要两个字符串所包含的字符序列相同,那么返回true,否则返回false。例如:
public static void main(String[] args) {
String str1 = new String("Fire");
String str2 = new String("Fire");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
}
打印结果:
false
true
而下面这个例子:
public static void main(String[] args) {
Persion p1 = new Persion();
Persion p2 = new Persion();
System.out.println(p1.equals(p2));
}
显然打印 false 。
但是应当注意下面这种情况:
public static void main(String[] args) {
String str1 = "Fire";
String str2 = "Fire";
String str3 = new String("Fire");
String str4 = new String("Fire");
System.out.println(str1 == str2);
System.out.println(str3 == str4);
System.out.println(str1 == str3);
System.out.println(str3.equals(str4));
System.out.println(str1.equals(str4));
}
打印结果为:
true
false
false
true
true
str1 == str2 返回true。这一点,我也不太理解。不知道String直接用"Fire"赋值与new出来的细节差别在哪里。等以后理解了,再做进一步解释。也请懂的人不吝赐教...