因为java除了简单类型外全是reference,== 其实就是判断两个索引是否相等, 而equals这是根据这个class的实现来判断是否相等.
比如:
class Dat{
int a;
int b;
public Dat( int i1, int i2) {
  a = i1;
  b = i2;
}public boolean equals(Object d) {
   Dat o = (Dat)d;
   return d.a == a && d.b == b;
}
};Dat d1 = new Dat(1, 2);
Dat d2 = new Dat(2, 3);
Dat d3 = d1;
Dat d4 = new Dat(1,2);
d1 == d3; // true
d1 != d2; // true
d1.equals(d3); // true
d1.equals(d2); // false
d1.equals(d4); //true

解决方案 »

  1.   

    好像一个是等价比较(equals) ,一个是引用比较(==)
      

  2.   

    看看这个http://www.matrix.org.cn/forum_view.asp?forum_id=21&view_id=9552
      

  3.   

    一个是等价比较(equals) ,一个是引用比较(==)
      

  4.   

    内容比较(equals)
    引用比较(==)
    equals在Object中就有了,String类重写了,你可以看源码
      

  5.   

    equals是Object类的一个方法,而所有类都是从Object类继承的,Object类的equals方法是检查是否比较的对象指向同一个引用。但是作为一个普通的方法,equals是可能在子类中被覆盖的。比如你可以在某个类中把equals方法写成某几个属性是相同时返回true,这样比较结果就可能与==结果不一样了。
    而==在比较两个对象时,与Object的equals方法功能一样。但是==也可以比较两个基本类型,比如 (i==0)比较i是否等于0
    Conclusion: 分3种情况
    1.==可以比较基本类型,而equals是一个方法,没法用于基本类型
    2.在比较两个对象时,如果实际调用的equals方法就是Object的方法,那结果==和equals比较结果是相同的
    3.如果子类覆盖了Object的equals方法,那么需要查看具体的文档,以确定比较结果
      

  6.   

    String 类 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;
        }
      

  7.   

    equals比较两个值,==比较两个引用