import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
Dog dog2 = new Dog();
System.out.println(dog2.equals(dog1));
}
public static class Dog{
}
}
对象是相同的,但equals方法表示它是假的。为什么?这不是真的吗?班级是空的。提前致谢
答案 0 :(得分:2)
我建议您查看文档:{{3}}
类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。
因为您没有重写.equals(Object)
方法并提供了更宽松的等价测试,所以调用了.equals(...)
的超类(即Object类)版本。因为dog1
和dog2
指的是占用不同内存空间的不同对象,所以默认情况下它们不等同。你必须提供自己的等效测试来克服这一点。
答案 1 :(得分:1)
如果您没有覆盖equals
类的Dog
方法,则它会返回Object
类的方法,该方法会比较对象的地址。您有两个Dog
个实例,因此有两个不同的地址,因此它们不相等。
答案 2 :(得分:0)
您应该阅读Object equals方法的javadoc。默认情况下,这些对象的方法不一样;你需要覆盖它才能让它返回true。
答案 3 :(得分:0)
类Dog不会覆盖默认的equals方法,因此默认值将适用(基本上是==),因为dog1和dog2是Dog的两个独立实例,这将是假的。
如果您希望能够以不同的方式区分,则应覆盖equals方法并将比较逻辑放入其中。
答案 4 :(得分:0)
每次在初始化时使用 new 关键字,都意味着新实例。两个不同的对象实例可以相同或不同,具体取决于您的类的相同定义。默认的等于方法定义会比较内存地址,在这种情况下会有所不同。