字符串内存分配

时间:2010-07-29 09:35:30

标签: java

哪一个更好

System.out.println("hello world");

String s="hello world";
System.out.println(s);

4 个答案:

答案 0 :(得分:9)

这个简单示例的内存分配没有区别。

答案 1 :(得分:6)

这种情况没有区别。

重要的是要了解引用的工作原理,并且局部变量与它们所引用的对象不同。局部变量本身所需的内存是微不足道的;如果它使代码更具可读性,你应该毫不犹豫地声明局部变量。

例如考虑以下代码:

String s1 = "a very long string...";
String s2 = s1;

此代码声明了两个String引用,但它们都引用了相同的String对象。在这种情况下,内存要求不会翻倍。

您永远不应低估编译器在优化代码时的智能程度。请考虑以下示例:

System.out.println("Hello world!");
System.out.println("Hello world!");
System.out.println("Hello world!");

上面的代码片实际上 NOT 将字符串对象"Hello world!"存储在内存中三次!文字是实习,只存储在内存中一次。

参考

JLS 3.10.5 String Literals

  

每个字符串文字都是对class String实例的引用。 String个对象具有常量值。字符串文字 - 或者更常见的是,作为常量表达式值的字符串 - 被“实例化”以便使用方法String.intern共享唯一实例。

相关问题

答案 2 :(得分:0)

查看JLS以了解JVM如何在内部处理字符串。

答案 3 :(得分:0)

没有区别。

但是,如果你要进行比较

String s=new String("hello world");
System.out.println(s);

System.out.println("hello world");

然后会有潜在的差异,因为后一种情况会成为字符串内化的候选者,而前者则不会。