【发布时间】:2015-09-10 09:28:57
【问题描述】:
我知道 StringBuilder 应该优先于 String,因为 String 将保存在常量字符串池中,并且为其分配新值不会覆盖以前的值。但是,StringBuilder 是一个覆盖其先前值的对象。
- 在什么情况下我应该使用 String 而不是 StringBuilder,反之亦然。
-
另外,如果我在 Hibernate 的支持类中有 String 类型的变量,我应该使用 StringBuilder 吗?怎么样?
... Result result = (Result) criteria.list().get(0); class Result{ String name; String fname; ... }
【问题讨论】:
-
只有少数字符串(文字字符串、字符串值常量表达式和您调用
intern()on 的字符串)将保留在池中。为什么你暗示这是不好的? “覆盖以前的值”是什么意思?分配给String变量与分配给StringBuilder变量的作用相同。您是在谈论可变性与不变性吗?你确定什么时候“更喜欢”StringBuilder? -
@xehpuk 据我所知,当您为 String 分配一个新值时,它会删除对其先前值的引用并添加新值的引用,因此先前的值会留在内存中等待 GC。而 StringBuilder 将新值替换为前一个值。我不确定,这就是为什么我在第一个要点中包含(vice vesa)
标签: java hibernate jpa orm stringbuilder