比较实体内容是否相同,方法能理解,就是不知道为什么会false,提供了一个空参的构造器,拿什么来比,不应该编译都过不了吗?


public class Equals {
    
        public static void main(String[] args) {
        Person p = new Person("zhang", 18);
        Person p1 = new Person("zhang", 18);
        System.out.println(p.equals(new Person()));//false
        System.out.println(p.equals(p1));//true
        }
    }
class Person {
        String name;
        int age ;
        
        
        public Person() {
            super();
        }

        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }

    public boolean equals(Object obj) {
        if(this == obj) {
            return true;
        }
        if(obj instanceof Person) {
            Person p = (Person)obj;
            return this.age == p.age&&this.name.equals(p.name);
         }else {
             return false;
         } 
      }
    }

返回false不是肯定的么,看看equals方法就知道了啊,必须年龄和姓名完全相同才会返回true
new Person()是调用默认构造函数,并没有给成员变量赋值,所以肯定和p变量的成员变量不一样啊
只要是对象构造完成,无论用什麽构造函数实现,类对象的成员变量都会分配空间,没有给出初始值,那就是一个随机值,要看分配的内存之前存储的是什麽,编译是没有问题的

return this.age == p.age&&this.name.equals(p.name);
这里不满足条件返回的false。new Person()这个对象age,name都没有赋值,是默认值,比较不相等。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632