Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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 = "abc"; // creates one String object and one // reference variable 在这个简单的例子中,“abc”将进入池中,s将引用它 String s = new String("abc"); // creates two objects, // and one reference variable 在本例中,由于我们使用了new关键字,Java将在普通(非工具)内存中创建一个新的String对象

根据凯西·塞拉的书:

String s = "abc"; // creates one String object and one
// reference variable
在这个简单的例子中,
“abc”
将进入池中,
s
将引用它

String s = new String("abc"); // creates two objects,
// and one reference variable
在本例中,由于我们使用了new关键字,Java将在普通(非工具)内存中创建一个新的String对象,
s
将引用它。此外,文字“abc”将放置在池中



正如我所知,当我们使用文本时,它将值存储在池中,但当我们使用new关键字时,它将在堆中创建对象。这里我想知道,堆对象是否引用池数据(字符串)?

使用新字符串(“abc”)创建的变量与池“abc”字符串不同


此主题已被击败致死——如果有人有精力搜索,很容易会有20个重复。@hotlick将关闭的20个重复作为~10000000个主题的重复。可能的重复取决于您使用的Java版本。在Java7更新25之前,heap对象会在内部指向pool(interned)对象。在大约更新25之后,这一点被更改,因此
新字符串
总是将数据复制到它自己的缓冲区中,因此在内部从来没有对另一个对象的引用。由于字符串重复数据消除,字符串副本将很快被删除。遗憾的是,这还不能解决这么多问题。。。
String string1 = "abc";
String string2 = new String("abc");
System.out.println(string1.equals(string2)); //will print true
System.out.println(string1 == string2); //will print false