在以下语句中将创建多少个Java字符串对象?
String s = "abc" + "xyz";
我猜三个?
答案 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'};