class Person
{
String name;
int age; Person(String n, int a)
{ name = n; age = a; }
public boolean equals(Object obj)
Person ps=null;
if(obj instanceof Person)
ps=(Person)obj;
else
return false;
if(name.equals(ps.name) && age==ps.age)
return true;
else
return false;
}
}
class EqualsDemo
{
public static void main(String args[])
{
Person p=new Person("John",20);
Person q=new Person("John",20);
Person r=new Person("John",18);
System.out.println(p==q);
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
if(p.equals(r))
System.out.println("p=r");
else
System.out.println("p!=r");
}
}我觉得输出结果应该是:
false
p=q
p!=r
但是实际输出结果是:
false
p!=q
p!=r
{
String name;
int age; Person(String n, int a)
{ name = n; age = a; }
public boolean equals(Object obj)
Person ps=null;
if(obj instanceof Person)
ps=(Person)obj;
else
return false;
if(name.equals(ps.name) && age==ps.age)
return true;
else
return false;
}
}
class EqualsDemo
{
public static void main(String args[])
{
Person p=new Person("John",20);
Person q=new Person("John",20);
Person r=new Person("John",18);
System.out.println(p==q);
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
if(p.equals(r))
System.out.println("p=r");
else
System.out.println("p!=r");
}
}我觉得输出结果应该是:
false
p=q
p!=r
但是实际输出结果是:
false
p!=q
p!=r
if(p.equals(q))
System.out.println("p=q");
else
System.out.println("p!=q");
会被认为不等,我就不明白了,我执行了一下你的代码输出结果为:
false
p=q
p!=r
或者可以写成:
public boolean equals(Object obj) {
try {
Person p = (Person)obj;
return (name == p.name || name.equals(p.name)) // in case name is null
&& age == p.age;
}catch(Exception e) {
return false;
}
}
false
p=q
p!=r但是我感觉你的equals方法应该再加上
if (obj == null)
return false;会更好
false
p=q
p!=r
--可能你的代码中:
public boolean equals(Object obj) //此处确实 少了个{ 请核对一下.
Person ps=null;
if(obj instanceof Person)
ps=(Person)obj;
else
return false;
if(name.equals(ps.name) && age==ps.age)
return true;
else
return false;
}