我正在进行SCJP
考试,并在一本书中找到了一行。
String s = new String("abc");
据说,将在上面创建两个对象。一个位于HEAP
,一个位于STRING POOL
。
我对那里的声明不满意。有人能让我理解为什么要创建两个对象吗?
提前致谢。
答案 0 :(得分:4)
作者是对的。当你使用String literal时,该文字首先进入常量池。
因此" abc"在恒定的池中创建。
当您使用新的关键字时,会在堆上创建一个名为s
的新对象。
答案 1 :(得分:2)
创建文本"abc"
并实习("字符串池")。
new
运算符将创建一个未被实习的新String
。
答案 2 :(得分:1)
作者是对的:
答案 3 :(得分:1)
对象1 - "abc"
对象2 - new String("abc")