为什么Java双等号不能比较没有父子关系的两个对象?我不理解所以求解答
3条回答 默认 最新
阿里嘎多学长 2024-07-24 16:11关注以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:
在Java中,使用双等号(
==)比较两个对象时,实际上比较的是两个对象的引用地址,即它们在内存中的位置。如果两个对象的引用地址相同,那么它们被认为是相等的。然而,对于没有父子关系的两个对象,它们通常在内存中有不同的地址,即使它们的内容或状态是相同的。这就是为什么使用双等号不能比较没有父子关系的两个对象的原因。下面是一段示例代码,演示了如何使用
equals()方法来比较两个没有父子关系的对象的内容:public class Main { public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String("hello"); // 使用双等号比较,比较的是引用地址 System.out.println(s1 == s2); // 输出 false // 使用 equals 方法比较,比较的是内容 System.out.println(s1.equals(s2)); // 输出 true // 自定义类,重写 equals 方法 Person p1 = new Person("John", 30); Person p2 = new Person("John", 30); System.out.println(p1.equals(p2)); // 输出 true } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; return age == person.age && (name != null ? name.equals(person.name) : person.name == null); } @Override public int hashCode() { return 31 * (name != null ? name.hashCode() : 0) + age; } }在这个示例中,我们首先创建了两个
String对象s1和s2,它们虽然内容相同,但是使用==比较时,由于它们引用不同的内存地址,所以返回false。然后,我们使用equals()方法比较这两个字符串对象,由于String类已经重写了equals()方法来比较内容,所以返回true。接着,我们定义了一个
Person类,并重写了equals()方法,以比较对象的属性值。创建了两个Person对象p1和p2,它们具有相同的属性值,使用equals()方法比较时,返回true。通过这个示例,你可以看到如何通过重写
equals()方法来实现对象内容的比较,而不是仅仅比较它们的引用地址。解决 无用评论 打赏 举报 编辑记录