等于java中的方法

时间:2015-08-04 09:09:29

标签: java equals

我已经阅读了java中的equals()方法。我听说它仅基于价值进行比较。但是,为什么它在下面的情况下返回false,其中值相同但类型不同?

public class test {
    public static void main(String[] args) 
    {
        String s1="compare";
        StringBuffer s2=new StringBuffer("compare");
        System.out.println(s1.equals(s2));  //false 
    }
}

4 个答案:

答案 0 :(得分:11)

String实例不能等于StringBuffer实例。

查看实施:

public boolean equals(Object anObject) {
if (this == anObject) {
    return true;
}
if (anObject instanceof String) { // this condition will be false in your case
    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实现,在比较不同类的两个对象时可能会返回true(虽然不在String类中),但我想不出一个情况这样的实现是有意义的。

答案 1 :(得分:3)

StringStringBuffer不同。使用toString()将其转换为String

String s1="compare";
StringBuffer s2=new StringBuffer("compare");
System.out.println(s1.equals(s2.toString())); 

答案 2 :(得分:0)

是的Eran是对的,你不能使用equals来计算两个不同的对象。如果你真的想这样做,那么在StringBuffer上使用toString()

System.out.println(s1.equals(s2.toString()));

答案 3 :(得分:0)

equals()方法属于Object

来自Java docs for Object

  

指示某个其他对象是否“等于”此对象。

基本上是这样的:

  

类Object的equals方法实现最具辨别力   对象可能的等价关系;也就是说,对于任何非null   引用值x和y,当且仅当x时,此方法返回true   和y引用相同的对象(x == y的值为true)。

如果你有StringStringBuffer他们就不会相等。

它们可能具有相同的值,但它们不相等,请查看instanceOf()方法。