可能重复:
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);
哪一个更好?
答案 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。