2014-10-01 105 views
0

其实我有点困惑,在下面的“代码处理”中创建了多少对象。在创建字符串对象时创建了多少对象

String s=new String("A"); 
s=s+"B"; 

其实有人说在这里会创建4个对象,但是在整个处理过程中却不明白。

请谁能给我详细描述还包括存储部分,例如串池等

+4

这看起来像是一个认证问题;)您通过了吗? – vikingsteve 2014-10-01 12:36:59

+0

我猜'字符串s =新的字符串是一个,''“A”是另一个,“B”是一个和连接运算符'+'将创建第四个 – 2014-10-01 12:37:03

+0

不是直接重复,因为这样会问创建了许多'objects',这大概可以包含'StringBuilder',也可以按照其他人的评论。 – vikingsteve 2014-10-01 12:52:11

回答

2

您有两个String文字对象,即"A""B"。然后你用new String("A");显式实例化一个新的“A”实例。最后,在执行String级联时创建第四个实例s+"B"

+0

s +“B”后面的StringBuilder? – TheLostMind 2014-10-01 12:41:41

+0

@TheLostMind StringBuilder实例或其他一些实例的“B”会产生一个新的“String”实例(并可能实例化一个新的StringBuilder)。如果我们在每个'String'实例中计算字符数组,我们可以得到更多的'Object'实例。 – 2014-10-01 12:44:05

+0

也许你是对的..在这种情况下,支持StringBuilder的数组也必须计数,并且String的长度也会改变。但是4是*可访问的*数目的对象。 :P – TheLostMind 2014-10-01 12:53:22

6
  • 创建的第一个String是文字"A",也就是说,如果没有实习 之前。
  • 第二个String是由new关键字生成的实例。
  • 第三个是字面"B",再次,如果之前没有实习。
  • 最后一个是s"B"的拼接。
+0

正确。值得注意的是围绕“A”的'new String()'是多余的。 – vikingsteve 2014-10-01 12:38:30

+0

@vikingsteve绝对。我也同意这看起来像1Z0-803的问题,就像你在评论中提到的那样:) – Mena 2014-10-01 12:39:26

+0

还会有一个StringBuilder对象被创建。共5个对象 – TheLostMind 2014-10-01 12:40:54