Java问题:假设str是一个String变量。语句str = new String(“Hello World”);相当于?
以下是我的选择......
一个。
new String = "Hello World";
℃。
str = "Hello World";
湾
String new = "Hello World";
d。
"Hello World";
答案 0 :(得分:6)
这相当于立即声明并初始化它:
String str = new String("Hello World");
但您不需要new String("...")
。你已经有了一个字符串文字。你可以这样做:
String str = "Hello World";
否则,您将获取第一个规范的String对象("Hello World"
)并不必要地使用它来初始化具有相同文本的第二个对象(new String(...)
)。
编辑:根据您现在发布的选项, 等同于任何。正如其他答案更详细解释的那样,"Hello World"
与new String("Hello World")
有微妙(但重要)的差异,因此它与str = "Hello World"
并不完全相同。另一方面,其他三个选项根本不编译,所以这肯定是预期的答案。
答案 1 :(得分:2)
很多答案都是关于内化的。采取这个计划:
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
String str4 = "He";
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str3.intern()); // true
str4 = str4.concat("llo");
System.out.println(str1 == str4.intern()); // true
}
有趣的问题是第2点和第3点。new
总是创建一个新对象(根据JLS 12.5),所以str1 != str3
。内化的情况是新对象指向内部化对象,您可以使用String.intern()
检索内部化对象。同样,以与原始文字(String
)完全无关的形式创建的另一个str4
也会被“加入”。