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都没有赋值,是默认值,比较不相等。