请遵循以下代码:
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”是==两侧的值。我希望我能很好地沟通。
答案 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。它具有很好的参考和解释。
其他资源:
答案 1 :(得分:-1)
如果要确保字符串在池中,请在它们上调用.intern()。因此,如果添加sss = sss.intern();在比较之前,现在应该是真的。