1.System.out.println(s1 == s2);//false; 这里为false的原因?
这个比较的是s1与s2是对象的引用,存放的对象的地址值,你前边new了两个对象,s1与s2分别指向对应的对象,所以s1的值肯定不同于s2
2.System.out.println(s1.equals(s2));//true; 这里为true的原因?
你在Student类中重写了equals()方法,比较细节就按你定义的来,
public boolean equals(Object anObject)
{
if(this == anObject) //a.这就是上面刚讲的的比较,所以this不等于anObject,继续向下执行
{
return true;
}
if(anObject instanceof Student) //b.anObject实际就是Student类的实例
{
Student student = (Student)anObject;
if(student.name.equals(this.name)) //d.这边可以看出equals实际就是比较对象的name属性,name是String类型,查看API可知,String类的equals()就是比较两个字符串的内容是否相等,“zhangsan”等于“zhangsan”,所以最终返回true
{
return true;
}
}
return false;
}
|