Java 问题:假设 str 是一个字符串变量。语句 str = new String("Hello World"); 相当于?
以下是我的选择...
一个。
new String = "Hello World";
C。
str = "Hello World";
湾。
String new = "Hello World";
d。
"Hello World";
Java 问题:假设 str 是一个字符串变量。语句 str = new String("Hello World"); 相当于?
以下是我的选择...
一个。
new String = "Hello World";
C。
str = "Hello World";
湾。
String new = "Hello World";
d。
"Hello World";
相当于一次声明并初始化它:
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"
。另一方面,其他三个选项根本不编译,所以这肯定是预期的答案。
关于内化,很多答案都是正确的。拿这个程序:
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
) 也被“实习”。