当使用关键字new创建字符串时,它将使用一个接受字符串字面量的构造函数创建一个新的字符串对象。我想知道在调用字符串构造函数之前,字面值是否会存储在常量池中。
我问这个问题的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道:
public static void main(String[] args)
{
String summer = new String("Summer"); //Line 1: The code creates a new String object with the value "Summer". This object is not placed in the String constant pool.
String summer2 = "Summer" //Line 2: The code creates a new String object with the value "Summer" and places it in the String constant pool.
}
她在第一行说通过new创建的String对象不会存储在常量池中。这没问题,但不清楚的是在构造函数中放入的字面量"Summer"是否被存储在常量池中。
在第二行中,她说将"Summer"分配给summer2将其存储在常量池中,这意味着第一行的字面量并没有放置在常量池中。
我的问题
- 第1行:构造函数中的字面量"Summer"是否在调用String构造函数之前放置在常量池中?
- 第2行:在第2行时,"Summer"是否已经存在于常量池中,还是在此行插入?
- 第2行:作者在说"Summer"在第2行插入到池中时是错的吗?
她在第一行中指出,使用new创建的String对象不会被存储在常量池中。这没问题,但是不清楚的是构造函数中放入的字面量"Summer"是否被放置在常量池中。
在第二行中,她指出将"Summer"赋值给summer2会将其存储在常量池中,这意味着第一行的字面量没有被放置在常量池中。
我的问题
- 第1行:构造函数中的字面量"Summer"是否在调用String构造函数之前就已经被放置在常量池中?
- 第2行:在第2行时,"Summer"是否已经存在于常量池中,还是在此行插入?
- 第2行:作者在说"Summer"在第2行插入到池中时是错的吗?