【发布时间】:2019-05-21 10:11:17
【问题描述】:
示例代码:
StringBuffer sb = new StringBuffer("hi");
sb = null;
问题:
字符串“hi”是否会以某种方式保留在内存中,即使在 StringBuffer 已被垃圾回收之后?或者它只是用来为 StringBuffer 创建一个 char 数组,然后从不放在内存中的任何地方?
【问题讨论】:
-
首选
StringBuilder而不是StringBuffer。至于文字String,这取决于你的Java版本以及它是否在intern池中。 -
似乎字符串文字被放入字符串池并在程序运行时保留在内存中。
-
@ElliottFrisch 我认为您必须返回相当多的方法才能找到没有被实习的字符串文字。
-
@OleV.V.好吧,等待优化器删除不必要的操作和不请求操作是有区别的。因此,无论差异多么微小,由于没有任何其他功能差异,仍然有理由更喜欢
StringBuilder。毕竟,您必须决定其中任何一个。 -
StringBuffer将复制传递给它的构造函数的参数,但不包含对它的任何引用,因此,它是否被垃圾收集,与 @ 的生命周期完全无关987654328@字符串实例。
标签: java string garbage-collection stringbuilder stringbuffer