考虑声明:
String s = new String(“abc”);
此语句是否会创建两个String对象,即“abc”和由's'表示的对象?
如果它创建了两个对象,那么“abc”会存储在String池中还是只是丢弃?
修改
我在提到Difference between string object and string literal时提出这个问题,在最后两个答案中,两个对象的创建被拒绝。
答案 0 :(得分:5)
避免这种行为,因为"abc"
已经是String
,并且通过制作new String
,您创建了一个不必要的Object
。
取而代之的是String s = "abc";
这样,String
被JVM拦截并被添加到池中。
要回答您的问题,您只需创建一个引用Object s
的{{1}}即可。
因此,如果您说"abc"
然后执行String t = new String("abc");
,则会在s==t
中产生。因为它们有false
的单独实例。
答案 1 :(得分:0)
String s = "HELLO";
此处“s”是String 类型的对象引用变量,它引用字符串文字对象“Hello”,它被添加到String Literal Pool。< / p>
String t = new String("Hello");
此处 t是String 类型的对象引用变量,引用添加到字符串池的String对象“Hello”。
Difference Between String Literal and String :
假设
String s =“Hello”;
String t = new String(“Hello”);
现在,如果进行了以下更改:
s = null;
t = null;
Hello与t关联的String对象将是垃圾收集器的候选者,但与s关联的Hello String Literal将不会成为垃圾收集器的候选者,因为ALWAYS BE A REFERENCE FROM STRING LITERAL POOL to it.