一尘不染

字符串是Java中的对象,那么为什么不使用'new'创建它们呢?

java

我们通常使用new关键字创建对象,例如:

Object obj = new Object();

字符串是对象,但是我们不能new用来创建它们:

String str = "Hello World";

为什么是这样?我可以用做一个琴弦new吗?


阅读 901

收藏
2020-03-09

共1个答案

一尘不染

除了已经说过的内容外,Java中的字符串文字(即像Java 一样"abcd"但不喜欢的字符串)new String("abcd")是经过内插的-这意味着,每次引用“ 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()比较字符串;==测试物理相等性)。

Interning String文字很好,因为它们经常被使用多次。例如,考虑(人为)代码:

for (int i = 0; i < 10; i++) {
  System.out.println("Next iteration");
}

如果没有String的内部,则“下一次迭代”将需要实例化10次,而现在只需要实例化一次。

2020-03-09