字符串是Java中的对象,那么我们为什么不使用“new”来创建它们呢?
2022-08-31 09:00:47
我们通常使用关键字创建对象,例如:new
Object obj = new Object();
字符串是对象,但我们不用来创建它们:new
String str = "Hello World";
这是为什么呢?我可以用 ?new
我们通常使用关键字创建对象,例如:new
Object obj = new Object();
字符串是对象,但我们不用来创建它们:new
String str = "Hello World";
这是为什么呢?我可以用 ?new
除了已经说过的内容之外,Java中的字符串文本[即,字符串像但不像]被禁留 - 这意味着每次你提到“abcd”时,你都会得到对单个实例的引用,而不是每次都有一个新的实例。因此,您将拥有:"abcd"
new String("abcd")
String
String a = "abcd";
String b = "abcd";
a == b; //True
但如果你有
String a = new String("abcd");
String b = new String("abcd");
那么有可能有
a == b; // False
(如果有人需要提醒,请始终用于比较字符串; 物理平等测试)。.equals()
==
实习字符串文本很好,因为它们经常被多次使用。例如,考虑(人为的)代码:
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
如果我们没有字符串的实习,“下一次迭代”将需要实例化10次,而现在它只会被实例化一次。
字符串是 Java 中的“特殊”对象。Java设计人员明智地决定,字符串的使用频率如此之高,以至于他们需要自己的语法以及缓存策略。当您通过说以下内容声明字符串时:
String myString = "something";
myString 是对字符串对象的引用,值为“某物”。如果您稍后声明:
String myOtherString = "something";
Java足够聪明,可以确定myString和myOtherString是相同的,并将它们作为同一对象存储在全局字符串表中。它依赖于这样一个事实,即您无法修改字符串来执行此操作。这降低了所需的内存量,并且可以更快地进行比较。
相反,如果你写
String myOtherString = new String("something");
Java将为您创建一个全新的对象,与myString对象不同。