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;
}
} 展开
{
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;
}
} 展开
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;
}
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;
}
展开全部
因为你没有比较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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你覆写了 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了。。。
实例中,你比较的两个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了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不清楚你的疑惑在哪里,
①进入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了啊,你看你是不是哪里弄混了。
①进入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了啊,你看你是不是哪里弄混了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为这个equals方法,是你自己写的,不是原生态的equals方法。
你这个方法中,如果类型都是Student,则比较二者的name属性,如果相同则返回true。
而原生态的,比较对象时,比较的是对象的指针(即引用地址)。
你这个方法中,如果类型都是Student,则比较二者的name属性,如果相同则返回true。
而原生态的,比较对象时,比较的是对象的指针(即引用地址)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询