好的,这个问题是这个问题的延伸
Java 字符串:"String s = new String("silly");"
上面的问题和这个问题问的一样,但我有一个新的怀疑点。
根据Effective Java
上述问题的答案,我们不应该这样做String s = new String("a new string");
,因为那会创建不必要的对象。
我不确定这个结论,因为我认为 Java 正在做自动字符串实习,这意味着对于一个字符串,无论如何内存中只有一个副本。
那么让我们看看String s = new String("a new string");
。
"a new string"
已经是在内存中创建的字符串。
当我这样做时String s = new String("a new string");
,那s
是也"a new string"
。所以根据automatic string interning
,s
应该是指向 的同一个内存地址"a new string"
吧?
那么我们怎么能说我们创造了不必要的对象呢?