Java 通过“创建字符串对象”;新";

Java 通过“创建字符串对象”;新";,java,Java,考虑以下声明: 字符串s=新字符串(“abc”) 该语句是否会创建两个字符串对象,即“abc”和由“s”表示的字符串对象 若它创建了两个对象,那个么“abc”会被存储在字符串池中还是被丢弃 编辑: 我问的这个问题是关于,在最后两个答案中,两个对象的创建被拒绝。避免这种行为,因为“abc”已经是一个字符串,通过创建新字符串,您正在创建一个不必要的对象 而是选择String s=“abc” 通过这种方式,字符串被JVM插入并添加到池中 为了回答您的问题,您只需创建一个对象s,它引用“abc” 所以当

考虑以下声明:

字符串s=新字符串(“abc”)

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

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

编辑:


我问的这个问题是关于,在最后两个答案中,两个对象的创建被拒绝。

避免这种行为,因为
“abc”
已经是一个
字符串
,通过创建
新字符串
,您正在创建一个不必要的
对象

而是选择
String s=“abc”

通过这种方式,
字符串
被JVM插入并添加到池中

为了回答您的问题,您只需创建一个
对象s
,它引用
“abc”

所以当你说
String t=newstring(“abc”)s==t
,将在
false
中生成。因为它们有各自的实例到abc
abc
String s=“HELLO”

这里,“s”是String类型的对象引用变量,它引用添加到String-literal池中的String-literal对象“Hello”

String t=新字符串(“Hello”)

这里,t是一个String类型的对象引用变量,表示添加到字符串池中的字符串对象“Hello”。

Difference Between String Literal and String :
假定

字符串s=“Hello”

字符串t=新字符串(“你好”)

现在,如果进行了以下更改:

s=零

t=零


与t关联的Hello String对象将是垃圾收集器的候选对象,但与s关联的Hello String Literal将不是垃圾收集器的候选对象,因为字符串文字池中总会有一个对它的引用。

那么,当您尝试它时,会发生什么?(查找“Java字符串==”问题,因为大多数[更好的]答案也应该讨论
新字符串
。请注意,字符串文字就是字符串文字。无论“使用”它的是什么。)所以你的意思是
字符串s=新字符串(“abc”)
将只创建一个对象,但不会创建两个对象—“s”和“abc”?@aLearner当您说
“abc”
时,它已经是
字符串(
对象
)。明白我的意思了吗?我想你没有明白我的问题。“abc”始终表示字符串对象,并将存储在字符串池中。没关系。但我要问的是,如果字符串池中还没有一个新对象“abc”,那么上面的语句是否还会将其存储在字符串池中,除了创建“s”。@aLearner将有两个对象,而
String s=“abc”仅创建一个对象。在这两种情况下,一般的“abc”都被扣留在字符串池中。@aLearner如果
的“abc”
不在那里,将创建一个新的
字符串并将其放入字符串池中。如果已经存在,则
字符串s=新字符串(“abc”)
只创建一个
对象
s
这里t是String类型的对象引用变量,它引用字符串对象“Hello”它被添加到字符串池中。
--我认为
t
不会指向池中的字符串对象,因为
new创建的字符串不会指向池中的字符串,除非intern()显式地将其插入