java 基础问题,关于equals方法的!!为什么结果是true呢?

publicclassEqualsTest{publicstaticvoidmain(String[]args){Students1=newStudent("zhangs... public class EqualsTest
{
public static void main(String[] args)
{
Student s1 = new Student("zhangsan","A");
Student s2 = new Student("zhangsan","B");
System.out.println(s1.equals(s2));
}
}

class Student
{
String name;
String age;

public Student(String name,String age)
{
this.name = name;
this.age = age;
}

public boolean equals( Object anObject)
{
if(this == anObject)
{
return true;
}

if (anObject instanceof Student)
{
Student student = (Student)anObject;
if (student.name.equals(this.name))
{
return true;
}
}

return false;
}

}
展开
 我来答
木木啄
2011-10-26
知道答主
回答量:9
采纳率:0%
帮助的人:9.5万
展开全部
因为Student类重载了equals方法,其中规定姓名相等返回true.
Student s1 = new Student("zhangsan","A");
Student s2 = new Student("zhangsan","B");
s1 和s2 都是 instanceof Student ,即Student类的实例
当 s2.name.equals(s1.name)) 所以return true.

如果要求姓名和年龄都要相等,可将equals改为
public boolean equals( Object anObject)
{
if(this == anObject)
{
return true;
}

if (anObject instanceof Student)
{
Student student = (Student)anObject;
if (student.name.equals(this.name) && student.age.equals(this.age) )
{
return true;
}
}

return false;
}
紫薇参星
科技发烧友

2011-10-26 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3494万
展开全部
因为你没有比较age是否相等,所以是true。如果你加上下面的代码就是false 了。
public class EqualsTest
{
public static void main(String[] args)
{
Student s1 = new Student("zhangsan","A");
Student s2 = new Student("zhangsan","B");
System.out.println(s1.equals(s2));
}
}

class Student
{
String name;
String age;

public Student(String name,String age)
{
this.name = name;
this.age = age;
}

public boolean equals( Object anObject)
{
if(this == anObject)
{
return true;
}

if (anObject instanceof Student)
{
Student student = (Student)anObject;
if (student.name.equals(this.name) && student.age==this.age)
{
return true;
}

}

return false;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun5760416
2011-10-26 · 超过20用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:53.2万
展开全部
你覆写了 Student中的equals方法啊,你指定假如名字一样就返回 true嘛。。
实例中,你比较的两个Student实例 的名字都是 “zhangsan”啊,所以 返回true...

假如你把
if (student.name.equals(this.name)){
return true;
}
改为:
if (student.name.equals(this.name) && student.age.equals(this.age)){
return true;
}
返回值就是false了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bai25447291
2011-10-26 · TA获得超过117个赞
知道答主
回答量:206
采纳率:100%
帮助的人:72万
展开全部
不清楚你的疑惑在哪里,
①进入equals的第一个比较,if (this == anObject) { return true;} 这是比较两个对象在内存中的地址,由于是不同的引用,所以这个判断一定返回false吧。
②if (anObject instanceof Student) { Student student = (Student) anObject;
if (student.name.equals(this.name)) { return true; } }
最外层是判断实例是否是这个对象的一个实例,显然是,继续走到下一个判断,很显然比较他们的name,这里都是你所设置的都是'zhangsan’,所以就返回true了啊,你看你是不是哪里弄混了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wujinlonghw
2011-10-26 · 超过11用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:43.5万
展开全部
因为这个equals方法,是你自己写的,不是原生态的equals方法。
你这个方法中,如果类型都是Student,则比较二者的name属性,如果相同则返回true。
而原生态的,比较对象时,比较的是对象的指针(即引用地址)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式