Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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中,将字符串分配给变量和直接与qoutes一起使用之间的内存分配差异_Java - Fatal编程技术网

在java中,将字符串分配给变量和直接与qoutes一起使用之间的内存分配差异

在java中,将字符串分配给变量和直接与qoutes一起使用之间的内存分配差异,java,Java,我想知道如果我使用 String s = new String("This is a string"); System.out.println(s); editText.setText(s); 及 这两个步骤有什么不同吗?..在第一种情况下,您使用new运算符初始化字符串,因此字符串将在堆中创建,因为字符串将被视为对象 在第二种情况下,您直接初始化字符串,因此它将存在于字符串常量池中,因为您的字符串将被视为文本。字符串文字是在字符串常量池中创建的 从技术上讲,字符串常量池在java中具有高效的

我想知道如果我使用

String s = new String("This is a string");
System.out.println(s);
editText.setText(s);


这两个步骤有什么不同吗?..

在第一种情况下,您使用new运算符初始化字符串,因此字符串将在堆中创建,因为字符串将被视为对象

在第二种情况下,您直接初始化字符串,因此它将存在于字符串常量池中,因为您的字符串将被视为文本。字符串文字是在字符串常量池中创建的


从技术上讲,字符串常量池在java中具有高效的内存管理,因为字符串池值在不使用时会被垃圾收集。

是的,但主要是因为第一个示例不太理想。你的第一个例子应该是:

String s = "This is a string";
System.out.println(s);
editText.setText(s);
字符串常量已经是字符串对象,不需要复制它,您可以直接将其分配给变量

理论上,第二个例子仍然不同,因为它的变量较少,但就所有意图和目的而言,它是相同的。编译器将两个相同的字符串合并为一个对象。但是,第一个版本的样式更好,因为它更清楚地表明您希望在两个语句中使用相同的字符串,因此更易于维护。

这可能有助于您。。。
String s = "This is a string";
System.out.println(s);
editText.setText(s);