3

考虑声明:

字符串 s=new String("abc");

该语句会创建两个字符串对象,即“abc”和一个由“s”表示的对象吗?

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

编辑:

我在参考字符串对象和字符串文字之间的差异时问这个问题,在最后两个答案中,拒绝创建两个对象。

4

2 回答 2

5

避免这种行为,因为"abc"已经是 aString并且通过制造 a new String,您正在创造一个不必要的Object

而是去String s = "abc";

通过这种方式,StringJVM 将其实习并添加到池中。

要回答您的问题,您只是在创建一个Object s引用"abc".

所以当你先说String t = new String("abc");再做s==t,就会屈服false。因为他们有各自的实例abc

于 2012-06-23T06:59:08.647 回答
0

String s = "HELLO";

这里的 "s" 是一个 String 类型的对象引用变量,它引用了添加到 String Literal Pool 中的String 字面量对象 "Hello" 。

String t = new String("Hello");

这里的 t 是一个 String 类型的对象引用变量它引用了添加到 String Pool 中的 String 对象“Hello”。

Difference Between String Literal and String :

认为

字符串 s = "你好";

字符串 t = new String("Hello");

现在,如果完成以下更改:

s = 空;

t = 空;

Hello String object associated with t will be a candidate for Garbage Collector, But Hello String Literal associated with s will NOT BE A CANDIDATE for Garbage Collector, as there will ALWAYS BE A REFERENCE FROM STRING LITERAL POOL to it.

于 2012-06-23T08:26:13.477 回答