本帖最后由 许圣建 于 2012-3-10 21:07 编辑
这要看常量池里有没有xyz,如果有的话则创建一个对象,如果没有的话就创建2个对象
版主正解。
我补充些细枝末节:
String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,
就是因为如此,才说String类型是不可变的(immutable)。
String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("xyz")实际创建了2个String对象,
一个是"xyz"通过""双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同,
一个是编译期,一个是运行期!
增加一道题以便说清楚:
String s1 = new String("s1") ;
String s2 = new String("s1") ;
上面创建了几个String对象?
答案:3个 ,编译期Constant Pool中创建1个,运行期heap中创建2个.
(用new创建的每new一次就在堆上创建一个对象,用引号创建的如果在常量池中已有就直接指向,不用创建) |