2010-10-03 25 views
3

当谈到字符串时,对于对象的情况我有点困惑,所以想知道使用下面的代码创建多少个对象,以及关于字符串池和堆的一些关于String对象创建的解释。如何知道将使用以下代码创建多少个对象?

public static void main(String[] args) { 

    String str1 = "String1"; 

    String str2 = new String("String1"); 

    String str3 = "String3"; 

    String str4 = str2 + str3; 

    } 

回答

13

将创建4个对象。

有两点需要注意:

  • new String("something")总是创建一个新的对象。字符串文字"something"只为所有的事件创建一个对象。最佳实践是从不使用new String("something") - 实例化是多余的。
  • 两个字符串的连接被转换为StringBuilder.append(first).append(second).toString(),所以在这里创建另一个对象。
+5

第二点在这种情况下是正确的,但如果参数是编译时间常量会变得更加困难。例如,我相信'String str1 =“foobar”; String str2 =“foo”+“bar”;'只有一个实例。 – 2010-10-03 18:12:26

+0

+1 Bozho *和* Mark – 2010-10-03 19:38:33

+0

@Bozho下列语句将创建多少个对象? '字符串a =“好”+“好运”;'3? – UnKnown 2016-03-14 13:06:19

1

每个str1,str2,str3,str4都是String对象。

str1:“String1”是一个字符串文字,Java在遇到字符串文字时创建一个String对象。

STR2:如您使用String类的String对象被创建

STR3的新的关键字和构造函数:类似STR1

STR4:连续字符串文字,类似于STR1

编辑:http://download.oracle.com/javase/tutorial/java/data/strings.html

+1

'str1','str2','str3'和'str4'是* not *对象,它们是对象引用。 – skaffman 2010-10-03 18:42:45

相关问题