本帖最后由 曾祥旭 于 2013-3-24 18:10 编辑
之前一直以为是:
==比较的是对象的地址值是否相等
equals()比较的是对象的内容是否相等。但是今天看到一个小程序:
Person p1=new Person(20);
Person p2=new Person(20);
System.out.println(p1==p2);//false
System.out.println(p1.equals(p2));//false
此时,p1与p2用equals方法进行比较结果是:false
那为什么在字符串中比较返回结果是:true,如下面的程序:
String a=new String("foo");
String b=new String("foo");
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
此时,a与b比较为什么结果是true呢?
张孝祥老师在就业面试中的解释:
两条new语句创建了两个对象,然后用a,b这两个变量分别指向
了其中一个对象,这是两个不同的对象,它们的首地址是不同的,
即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,
而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
按照张老师的解释,那么a与b利用equals方法比较的不就应该是内容吗?
这样的话,p1与p2用equals方法进行比较结果是:false,这又是为什么呢?
内容不是相同的吗?不应该为true吗? |