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