Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这东西内部是如何工作的?_Java_String - Fatal编程技术网

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");