通过“new”创建String对象

时间:2012-06-23 06:52:56

标签: java

考虑声明:

  

String s = new String(“abc”);

此语句是否会创建两个String对象,即“abc”和由's'表示的对象?

如果它创建了两个对象,那么“abc”会存储在String池中还是只是丢弃?

修改

我在提到Difference between string object and string literal时提出这个问题,在最后两个答案中,两个对象的创建被拒绝。

2 个答案:

答案 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.