在代码String s =“abc”+“xyz”中创建了多少个Java字符串对象;?

时间:2011-07-05 05:07:51

标签: java string

在以下语句中将创建多少个Java字符串对象?

String s = "abc" + "xyz"; 

我猜三个?

3 个答案:

答案 0 :(得分:23)

编译器为每个JVM启动创建1个String,因为编译器可以在编译时确定生成的String,它是interned并静态存储在JVM的String Table中。


仅供参考,如果语句连接变量(在运行时无法确定),则会创建1个字符串,但它也会创建StringBuilder。代码将编译为:

new StringBuilder().append(abcVar).append(xyzVar).toString()

答案 1 :(得分:9)

答案是每个程序运行一个全局String对象,每个语句执行零个新String对象。这是因为Java语言规范说表达式"abc" + "xyz"是编译时常量[0],并且在执行语句时不会创建新的String对象[1]。

参考

[0]:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5313

  

常量表达式的示例:

"The integer " + Long.MAX_VALUE + " is mighty big."

[1]:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.18.1

  

如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换以在运行时生成字符串。结果是对String对象的引用(新创建,除非表达式是编译时常量表达式(第15.28节)),它是

的串联

答案 2 :(得分:-3)

在java中有三种方法可以创建字符串

1)我们可以通过将一组字符分配给字符串类型变量

来创建字符串

例如:

     String s;  //declare String type variable,  
     s="hello"; //assign a group of characters to it

2)我们可以通过使用new运算符分配内存来创建一个字符串对象。这就像为任何类创建一个对象一样。

例如:String s =new String("Hello");

3)我们可以通过将字符数组转换为字符串来创建字符串。

例如:char arr[] = {'p','r','a','s','h','a','n','t'};