==
(1)用于 基本类型(int, float等)的比较时,返回数值 意义/大小 是否相同的结果
(2)用于对象比较时(Interger,String, 库对象、自定义对象等),返回 两对象 地址是否相同的结果
equals
(1)不能用于基本类型,只能作为对象的方法被调用
(2)java中所有对象继承于Object对象, 其中Object 的 equals 表示 两个对象的地址空间是否相同,
所以如果 子类未覆盖equals方法,则继承Object的equals
如下自定义类 B,未覆盖equals,所以返回结果为两个对象的地址空间是否相同。
class B {
private int num;
B() {
num = 1;
}
}
B a = new B();
B b = new B();
System.out.println(a.equals(b));//false
但java中一些类在实现时覆盖了equals方法,如String
String 中 equals 表示两个 String 对象所存储字段(字面意义)是否相同
String str_a = new String("abc");
String str_b = new String("abc");
System.out.println(str_a.equals(str_b)); //true
System.out.println(str_a==str_b); // false
而StringBuffer并未覆盖 equals方法,采用继承自Object的equals
StringBuffer sb1 = new StringBuffer("a");
StringBuffer sb2 = new StringBuffer("a");
System.out.println(sb1.equals(sb2)); //false
System.out.println(sb1==sb2); // false
自定义类中重新定义equals方法
class A {
private int a;
A() {
a = 1;
}
public boolean equals(A b) {
if (a == b.a)
return true;
else
return false;
}
}
A a = new A();
A b = new A();
System.out.println(a.equals(b)); //true
System.out.println(a == b); //false
结论:如此可见 equals的意义取决于该对象中 对equals是否覆盖,以及覆盖后的意义。
ps:类定义时,常常需要根据自身需要覆盖 toString, equals等方法。
时间: 2024-11-08 04:25:26