java中的字符串对象和引用

时间:2013-05-17 05:25:58

标签: java string

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

创建了多少个对象以及创建了多少个引用?

1 个答案:

答案 0 :(得分:2)

String是一个不可变对象。无论何时操作String,JVM都会创建(至少)一个新的String并为其分配新的(连接的)值。

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

想象一下这段代码:

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

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

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