StringBuilder 在比较两个具有相同值的 stringbuilder 对象时给我假值?
StringBuilder giving me false value while comapring two stringbuilder object with same value?
正如我所读,equals()
方法用于比较 java 中的字符串是否相等,但是当我 运行 这段代码时,我得到输出 false 。为什么?
public class TestStringBuilder {
public static void main(String[] str){
StringBuilder sb1= new StringBuilder("Hello World");
StringBuilder sb2= new StringBuilder("Hello World");
System.out.println(sb1.equals(sb2));
}
}
在 String builder 中,因为没有覆盖 .equals()
方法,所以调用对象 .equals()
方法
这等同于对象引用而不是它的值。
虽然在字符串 class 中,这已被覆盖以比较每个位置的值,然后 return 结果
这是来自字符串 class 的重写 .equals()
方法,它不言自明为什么会这样
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count; //count is the length of return in the docs
if (n == anotherString.count) {
char v1[] = value;//The value is used for character storage.
char v2[] = anotherString.value;
int i = offset; //The offset is the first index of the storage that is used.
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
您必须比较 StringBuilder
中包含的字符串而不是构建器本身:
System.out.println(sb1.toString().equals(sb2.toString()));
这将 return 为真
equals() 在字符串和原始包装器中被覆盖 类。它在 StringBuilder 中不是 ovrrriden,因此它检查相同的引用,这是错误的。
正如我所读,equals()
方法用于比较 java 中的字符串是否相等,但是当我 运行 这段代码时,我得到输出 false 。为什么?
public class TestStringBuilder {
public static void main(String[] str){
StringBuilder sb1= new StringBuilder("Hello World");
StringBuilder sb2= new StringBuilder("Hello World");
System.out.println(sb1.equals(sb2));
}
}
在 String builder 中,因为没有覆盖 .equals()
方法,所以调用对象 .equals()
方法
这等同于对象引用而不是它的值。
虽然在字符串 class 中,这已被覆盖以比较每个位置的值,然后 return 结果
这是来自字符串 class 的重写 .equals()
方法,它不言自明为什么会这样
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count; //count is the length of return in the docs
if (n == anotherString.count) {
char v1[] = value;//The value is used for character storage.
char v2[] = anotherString.value;
int i = offset; //The offset is the first index of the storage that is used.
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
您必须比较 StringBuilder
中包含的字符串而不是构建器本身:
System.out.println(sb1.toString().equals(sb2.toString()));
这将 return 为真
equals() 在字符串和原始包装器中被覆盖 类。它在 StringBuilder 中不是 ovrrriden,因此它检查相同的引用,这是错误的。