我已经阅读了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
}
}
答案 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)
String
与StringBuffer
不同。使用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
。
指示某个其他对象是否“等于”此对象。
基本上是这样的:
类Object的equals方法实现最具辨别力 对象可能的等价关系;也就是说,对于任何非null 引用值x和y,当且仅当x时,此方法返回true 和y引用相同的对象(x == y的值为true)。
如果你有String
和StringBuffer
他们就不会相等。
它们可能具有相同的值,但它们不相等,请查看instanceOf()
方法。