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