-2

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

以下是我的选择...

一个。

new String = "Hello World"; 

C。

str = "Hello World";

湾。

String new = "Hello World";

d。

"Hello World";
4

2 回答 2

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"。另一方面,其他三个选项根本不编译,所以这肯定是预期的答案。

于 2013-09-23T01:33:59.893 回答
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) 也被“实习”。

于 2013-09-23T01:47:39.790 回答