0
String str = "Hello"+"World";
String str1 = str + "hello";

创建了多少对象,创建了多少引用?

4

1 回答 1

2

String 是一个不可变的对象。每当您操作字符串时,JVM 都会(至少)创建一个新字符串并为其分配新的(连接的)值。

由于您没有指定您只关心 String 对象和引用,因此我们需要讨论 StringBuffers。StringBuffers(除了 StringBuilders)是一个试图解决字符串不可变性质的类。我们都知道,很多时候我们只需要将两个或多个字符串相加。

想象一下这段代码:

String sentence = "the " + "quick " + "brown " + "fox ";

很多时候,当这种情况发生时,Java 编译器不会创建这些字符串,一次将它们添加在一起,然后忘记所有中间字符串。发生的事情是创建了一个 StringBuffer。然后,使用 StringBuffer.append(String) 添加所有单个字符串,最后返回一个字符串。

您可以肯定地说,创建了 3 个字符串引用,引用内联(和池化)字符串“Hello”、“World”和“hello”。每个引用引用一个不同的字符串。如果第三个单词也是“Hello”(大写 h),情况就会改变。

于 2013-05-17T05:46:35.827 回答