假设str是一个String变量。语句str = new String(“Hello World”);相当于?

时间:2013-09-23 01:30:33

标签: java

Java问题:假设str是一个String变量。语句str = new String(“Hello World”);相当于?

以下是我的选择......

一个。

new String = "Hello World"; 

℃。

str = "Hello World";

String new = "Hello World";

d。

"Hello World";

2 个答案:

答案 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也会被“加入”。