【发布时间】:2017-05-24 04:58:14
【问题描述】:
今天在看Antonio's Blog about toString() performance有一段话:
昨天被认为是邪恶的(“不要用 + 连接字符串!!!”),现在变得很酷和高效! 今天,JVM 将 + 符号编译为字符串构建器(在大多数情况下)。所以,不要犹豫,使用它。
现在我很困惑,因为他说 今天 JVM 将 + 符号编译为字符串生成器(在大多数情况下),但我以前从未听说过或见过(代码)这样的东西.
有人可以举个例子JVM在哪里这样做以及在什么条件下发生?
【问题讨论】:
-
@Eric 恐怕这与上述问题无关。因为在这个问题中,他明确指出 concat() 方法只接受 String 值,而 + 运算符会默默地将参数转换为 String(对对象使用 toString() 方法)。但是,我说的是发生在 StringBuilder 中的转换。如果缺少什么,请填写我。
-
@MehrajMalik 您是否看过已接受的答案?这几乎是一个骗局
-
@SomeJavaGuy 是的,我做到了。他提到 StringBuilder 转换发生在 + 操作符后面。但是,我的问题是这种情况是否一直发生,或者它需要一些特定的条件。如博客中所述(在大多数情况下会发生)。那么在哪些情况下它不转成StringBuilder呢?
-
你可能想看看这个。 [pellegrino.link/2015/08/22/… 。用“+”添加字符串会给你 O(n^2) 复杂度,而 StringBuilder 的 append(String) 方法会给你 O(n) 复杂度
标签: java performance jvm tostring stringbuilder