我知道String实例创建和字符串文字的区别。
我所知道的是,当我们创建新的字符串对象时,即
String str= new String("xyz");
将在堆中创建一个新对象并将其分配给局部变量str,同时将在字符串池中创建一个字符串文字(如果我错了,请更正我)。
这里我想知道的是,在堆中新创建的对象,它自己保存值还是内部指向字符串池?或在堆中创建的新对象是保持值还是只包装字符串池中已存在的对象的值?
答案 0 :(得分:1)
至少在Open JDK和Oracle的实现中,String对象在内部持有一个包含实际数据的私有char[]
(至少达到jdk1.8)。当您说new String("literal")
时,会创建一个新对象,该对象的char[]
字段引用与实习字符串池中的字段相同的数组。