这件事在内部如何运作?

时间:2018-10-03 17:00:44

标签: java string

请遵循以下代码:

String s="helloworld";
String ss="hello";
String sss=ss+"world";
System.out.print(sss==s);

输出为false。他们不接受String的字符串池规则检查吗?如果我们将它们设为final,该怎么办?

对内部工作的一些解释会有所帮助。预先感谢。

如果字符串文字的内容相同,则它们指向相同的位置,这就是我从不同来源获得的信息,对吗?如果是,那么这里发生了什么?我对此有些困惑。

编辑:-

我认为我的措词不正确。我再改一下(对不起,请稍候尝试):-

    String ss="hello";
    System.out.print(ss+"world"=="helloworld");

这将返回false。但是,这些是字符串文字,正如我所读过的,它们不会为相同的值创建两个不同的对象。它们只是引用相同的值。在此,“ helloworld”是==两侧的值。我希望我能很好地沟通。

2 个答案:

答案 0 :(得分:0)

因为String是一个对象,所以比较这两个对象与==相同,后者等于false

使用对象ss合并为sss不会产生s = sss

如果将ss设置为s,则使用==等同于true,因为它们现在是同一对象。

如果您使用字符串文字设置第二个String对象,则使用==将等于true

如果使用String对象的功能.equals(String),则会发现它等同于true

如果您比较两个字符串文字,即"helloworld" == "helloworld""helloworld" == "hello" + "world",它们也将等于true

正如lealceldeiro所指出的,应该始终将字符串与.equals()进行比较。

编辑

值得一看的是this answer。它具有很好的参考和解释。

其他资源:

JournalDev

Baeldung

答案 1 :(得分:-1)

如果要确保字符串在池中,请在它们上调用.intern()。因此,如果添加sss = sss.intern();在比较之前,现在应该是真的。