Java 这东西内部是如何工作的?
请按照以下代码操作:Java 这东西内部是如何工作的?,java,string,Java,String,请按照以下代码操作: String s="helloworld"; String ss="hello"; String sss=ss+"world"; System.out.print(sss==s); 输出为false。他们没有用字符串池规则检查字符串吗?如果我们让它们成为最终的呢 稍微解释一下内部工作会有所帮助。提前谢谢 字符串文本指向相同的位置,如果它们的内容相同,这就是我从不同来源得到的,对吗?如果是,那么这里发生了什么?我对此有点困惑 编辑:- 我想我说得不对。让我重新表述一下(很抱
String s="helloworld";
String ss="hello";
String sss=ss+"world";
System.out.print(sss==s);
输出为false
。他们没有用字符串池规则检查字符串吗?如果我们让它们成为最终的呢
稍微解释一下内部工作会有所帮助。提前谢谢
字符串文本指向相同的位置,如果它们的内容相同,这就是我从不同来源得到的,对吗?如果是,那么这里发生了什么?我对此有点困惑 编辑:- 我想我说得不对。让我重新表述一下(很抱歉之前的尝试):-
这返回false。然而,这些是字符串文字,正如我所读到的,它们不会为相同的值创建两个不同的对象。它们只是对同一个值的引用。这里,“helloworld”是==两边的值。我希望我能很好地沟通。因为
字符串
是一个对象,比较这两个对象是否与=
相同,这将等同于错误
使用对象ss
压缩到sss
不会使s=sss
如果将ss
设置为s
,则使用=
将等同于true
,因为它们现在是相同的对象
如果使用字符串文字设置第二个String
对象,则使用=
将等同于true
如果使用String
对象的函数.equals(String)
,您会发现它等同于true
如果比较两个字符串文本,即“helloworld”==“helloworld”
或“helloworld”==“hello”+“world”
,它们也将等同于true
正如Lealcelderio指出的,字符串应该始终与.equals()
进行比较
编辑
值得一看的是。它有很好的参考和解释
其他资源:
作为旁注
字符串
值应始终使用.equals
进行比较。否!作者正在考虑参考比较。他说:“HellowWolld”应该是与“hello”+“world”结果相同的实例。如果字符串文本的内容相同,则指向相同的位置。-当然,字符串文本,但是ss+“world”
不是字符串文本。不!问题是关于引用和字符串池,但是,如果内容相同,则字符串文本指向相同的位置。不是吗?不是。这取决于JVM的实现。由于性能原因,不能说字符串相等,请指向同一地址。您可以通过以下方式强制它使用新地址(取决于JVM):`System.out.println(新字符串(“a”)==新字符串(“a”))
String ss="hello";
System.out.print(ss+"world"=="helloworld");