当前位置:  开发笔记 > 编程语言 > 正文

在同一个StringBuilder实例上调用toString时输出不同

如何解决《在同一个StringBuilder实例上调用toString时输出不同》经验,为你挑选了1个好方法。

我正在测试Strings,我提出了以下代码:

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.

知道为什么两个输出都不同吗?我知道如何比较字符串,我只是对结果不同的原因感到好奇.



1> Tunaki..:

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

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

所以每次调用它时都会返回一个新的String.

设置时str2 = str1,它们是相同的实例,因此==返回true.但是,当您设置时str2 = sb1.toString(),它将设置为新的String(具有相同的内容),因此==返回false.

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

返回表示此序列中数据的字符串.分配并初始化一个新的String对象,以包含此对象当前表示的字符序列.然后返回此String.对此序列的后续更改不会影响String的内容.

请注意,您不应该使用==比较Strings来开始(参考这个问题).

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有