无论是看ppt或者网上的观点,大多对这两者是这样说的,equals是比较内容,而"=="是指地址。。前些天,复习j2se的东西,看了一下源码,才有些理解了,不知道对不对,欢迎大家的指正。。
  这两个其实是相同的。。在Object那个类里面equals方法是这样写的:
  代码如下
    public boolean equals(Object obj) {
return (this == obj);
     }
  也就是说返回的是当前对象,如果不重写toString方法,那么它的值肯定是一个地址,与"=="是没啥区别的。。
  那么为什么说equals是比较内容呢?我估计是因为String。。
  有这样一个例子:
    String a=new String("abc");
    String b=new String("abc");
    System.out.println(a.equals(b));//也许在这里是被认为内容相同,他们在比较内容。。
  我查看了一下String里面的equals方法,它是重写Object的equals方法了,代码如下:
    public boolean equals(Object anObject) {
if (this == anObject) {
    return true;
}
if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = count;
    if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
    if (v1[i++] != v2[j++])
return false;
}
return true;
    }
}
return false;
    }
  这个意味着如果一个对象不重写equals方法,不管他们的属性是否相同,它们用equals来比较都是false!

解决方案 »

  1.   

    其实这么设计的目的很明确,就是用!=来代替==的逻辑上的判断,equals本来的目的就是判断是否同一,而判断相等可以令写方法
      

  2.   

    看看java模式,讨论了很多类似问题
    equals , clone,等等的
      

  3.   

    没看这本书,对我影响比较大的恐怕就是thinking in java了,呵呵~我一直觉得代码是敲出来的,网上说多听视频,当然也对。。
      

  4.   

    从API上得出的结论,
    (1)Object 是所有类的基类,Object中的equals方法和==是一样的意思,都是比较地址所指向对象。
    (2)String等重写了equals方法,使得equals和==有了不一样的意思,即equals比较的是String对象的值,==比较的是String对象的地址。
    结论就是,对于重写了Object中equals方法的类来说,equals可能和==有不一样的意思。对于没有重写Object中equals方法的类来说,equals完全和==表达一样的意思,即比较引用地址。
      

  5.   

    这个意味着如果一个对象不重写equals方法,不管他们的属性是否相同,它们用equals来比较都是false!