new String()究竟创建几个对象

在Java中,new String("hello")这样的创建方式,到底创建了几个String对象?

String temp = "hello"; // 在常量池中
String str = new String(temp); // 在堆上
字符串String的成员变量有hash, value[]数组

这段代码就创建了2个String对象,temp指向在常量池中的,str指向堆上的,而str内部的char value[]则指向常量池中的char value[],所以这里的答案是2个对象。

new String:
如果字符串常量池中没有这个字符串,则先在常量池中生成这个String对象,然后在堆上创建一个String对象,并且该String.value[]指向常量池中的value[]
如果字符串常量池中有这个字符串,则在堆上创建一个String对象,并且该String.value[]指向常量池中的value[]

String a = "hehe";
如果字符串常量池中没有这个字符串,则先在常量池中生成这个String对象,并返回引用。
如果字符串常量池中有这个字符串,则直接返回引用。

posted @ 2018-04-16 20:38  牧 天  阅读(776)  评论(0)    收藏  举报