gpt4 book ai didi

java - StringBuilder 在比较两个具有相同值的 stringbuilder 对象时给我假值?

转载 作者:行者123 更新时间:2023-11-30 08:13:50 26 4
gpt4 key购买 nike

当我读到 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() 方法,所以这调用了 Object .equals() 方法这等同于对象引用而不是它的值。

虽然在 String 类中,这已被覆盖以比较每个位置的值,然后返回结果

这是来自 String 类的重写 .equals() 方法,它可以 self 解释为什么会这样

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

关于java - StringBuilder 在比较两个具有相同值的 stringbuilder 对象时给我假值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29788777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com