考虑声明:
字符串 s=new String("abc");
该语句会创建两个字符串对象,即“abc”和一个由“s”表示的对象吗?
如果它创建了两个对象,那么“abc”会存储在字符串池中还是被丢弃?
编辑:
我在参考字符串对象和字符串文字之间的差异时问这个问题,在最后两个答案中,拒绝创建两个对象。
考虑声明:
字符串 s=new String("abc");
该语句会创建两个字符串对象,即“abc”和一个由“s”表示的对象吗?
如果它创建了两个对象,那么“abc”会存储在字符串池中还是被丢弃?
编辑:
我在参考字符串对象和字符串文字之间的差异时问这个问题,在最后两个答案中,拒绝创建两个对象。
避免这种行为,因为"abc"
已经是 aString
并且通过制造 a new String
,您正在创造一个不必要的Object
。
而是去String s = "abc";
通过这种方式,String
JVM 将其实习并添加到池中。
要回答您的问题,您只是在创建一个Object s
引用"abc"
.
所以当你先说String t = new String("abc");
再做s==t
,就会屈服false
。因为他们有各自的实例abc
。
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.