字符串内存分配

时间:2010-07-29 10:07:24

标签: java

  

可能重复:
  string memory allocation

之间有什么区别
System.out.println("hello world");
System.out.println("hello world");

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

哪一个更好?

4 个答案:

答案 0 :(得分:2)

没有,它们编译成几乎相同的字节码(唯一的区别是变量引用)。没有内存差异(变量引用除外)。

答案 1 :(得分:1)

代码质量方面,最好将重复字符串定义为常量:

public static final String HELLO_WORLD = "hello world";

至于记忆 - 没有区别。

答案 2 :(得分:0)

在这种特殊情况下,它们都是相同的。 VM的常量字符串为intern,因此它们都指向同一个String对象。

通常,一旦计算出字符串,最好将其分配给字段/变量并重用它。 (我想这通常适用 - 当没有变化时重用计算结果,而不是重复计算。)

对于字符串常量,我通常将它们移动到静态常量字段中。没有性能提升,但它避免了代码中的“魔术值”。同样,理想情况下,UI消息应移出代码并放入properties bundles

答案 3 :(得分:0)

在我看来,Java编译器将优化代码,两种解决方案之间没有任何区别。

javac中的代码优化不值得gcc的优化,但对于这类事情它应该足够高效。 您可以在Java中查看“常量折叠”优化(但我不确定)。 您还可以查看this article