哪一个更好
System.out.println("hello world");
或
String s="hello world";
System.out.println(s);
答案 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!"
存储在内存中三次!文字是实习,只存储在内存中一次。
每个字符串文字都是对
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");
然后会有潜在的差异,因为后一种情况会成为字符串内化的候选者,而前者则不会。