【发布时间】:2021-05-05 05:19:34
【问题描述】:
13: String a = "";
14: a += 2;
15: a += 'c';
16: a += false;
17: if ( a == "2cfalse") System.out.println("==");
18: if ( a.equals("2cfalse")) System.out.println("equals");
输出:
equals
如果我错了,请纠正我...
在第 13 行创建了一个新的String 对象,并且引用存储在a。 (a = "")
在第 14 行创建了一个新的String 对象,并且引用存储在a 中。之前的 String 对象符合垃圾回收 (GC) 条件。 (a = "2c")
在第 15 行创建了一个新的 String 对象,并且引用存储在 a 中。之前的 String 对象符合垃圾回收 (GC) 条件。 (a = "2cfalse")。
现在,String pool 由 2cfalse 文字组成。因此,在第 17 行,不应将 a == "2cfalse" 评估为 true,因为它们都指向内存中的同一个对象?
但是,程序输出只是==。我哪里做错了?谁能给我解释一下...
【问题讨论】:
-
如果您担心这些问题,请使用
StringBuilder(除非这是家庭作业并且您需要解释)。 -
是的,我需要一个解释...
-
你已经离开了这些值,即第 14 行之后的字符串是
"2",第 15 行之后是"2c"。
标签: java string garbage-collection concatenation string-pool