gpt4 book ai didi

java - 在同一 StringBuilder 实例上调用 toString 时的不同输出

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:46 24 4
gpt4 key购买 nike

我正在围绕字符串进行测试,我想出了以下代码:

public static void main(String[] args){
StringBuilder sb1 = new StringBuilder("Cuba");
String str1 = sb1.toString();
// n1
System.out.println(str1 == str2);
}

n1 上,如果我放置:

String str2 = sb1.toString();

我得到 false。但是,如果我放置:

String str2 = str1;

我得到 true

我不确定为什么会这样:两个代码都引用同一个实例,因此,两个输出都必须为 true

知道为什么两个输出不同吗?我知道如何比较字符串,我只是想知道结果不同的原因。

最佳答案

这是 StringBuilder.toString() 的代码在 OpenJDK 8u40 中:

@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}

所以每次调用它时它都会返回一个新的字符串。

当您设置 str2 = str1 时,它们是相同的实例,因此 == 返回 true。但是,当您设置 str2 = sb1.toString() 时,它会被设置为一个新的字符串(具有相同的内容),因此 == 返回 false.

这实际上是在toString()中指定的Javadoc(强调我的):

Returns a string representing the data in this sequence. A new String object is allocated and initialized to contain the character sequence currently represented by this object. This String is then returned. Subsequent changes to this sequence do not affect the contents of the String.

请注意,您不应该使用 == 来比较 String 开头(请参阅 this question)。

关于java - 在同一 StringBuilder 实例上调用 toString 时的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112214/

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