【发布时间】:2011-03-22 14:58:31
【问题描述】:
哪个更好
System.out.println("hello world");
或
String s="hello world";
System.out.println(s);
【问题讨论】:
-
这样的微优化通常不值得。
标签: java
哪个更好
System.out.println("hello world");
或
String s="hello world";
System.out.println(s);
【问题讨论】:
标签: java
这个简单的例子在内存分配方面没有区别。
【讨论】:
在这种情况下没有区别。
了解引用的工作原理以及局部变量与它们所引用的对象不同,这一点很重要。局部变量本身所需的内存是微不足道的;如果它使代码更具可读性,你应该毫不犹豫地声明局部变量。
例如下面的代码:
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!");
上面的sn-p 实际上NOT 将字符串对象"Hello world!" 3 次存储在内存中!文字是 interned 并且只在内存中存储一次。
每个字符串文字都是对
class String实例的引用。String对象有一个常量值。字符串字面量——或者更一般地说,作为常量表达式值的字符串——是“内部”的,以便共享唯一的实例,使用方法String.intern。
【讨论】:
没有区别。
但是,如果你要比较
String s=new String("hello world");
System.out.println(s);
与
System.out.println("hello world");
然后会有一个潜在的差异,因为后一种情况将是字符串内部化的候选者,而前者不会。
【讨论】:
查看JLS 以了解 JVM 如何在内部处理字符串。
【讨论】: