以下这两个陈述有什么区别?
String s = "text"; String s = new String("text");
new String("text"); 显式地创建一个新的和引用不同的String对象实例;如果可用,可以重用 字符串常量池中*String s = "text";的实例。 *
new String("text");
String
String s = "text";
你 很少 会想要使用new String(anotherString)构造函数。从 API:
new String(anotherString)
String(String original):初始化一个 新创建 String的对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要原始的显式副本,否则不需要使用此构造函数,因为字符串是不可变的。
String(String original)
检查以下代码段:
String s1 = "foobar"; String s2 = "foobar"; System.out.println(s1 == s2); // true s2 = new String("foobar"); System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // true
==对两个引用类型进行引用标识比较。两个对象equals不一定是==。==在引用类型上使用通常是错误的;大部分时间都equals需要改用。
==
equals
尽管如此,如果出于某种原因需要创建两个equals而不是==字符串, 则可以 使用new String(anotherString)构造函数。然而,需要再说一遍,这是 非常 奇特的,而且很少是有意的。
class Object
boolean Object(equals)