【发布时间】:2012-05-13 16:23:37
【问题描述】:
我正在讨论 Java 中 Strings 和 StringBuffers 的用法。这两个示例分别创建了多少个对象?
例 1:
String s = "a";
s = s + "b";
s = s + "c";
例 2:
StringBuilder sb = new StringBuilder("a");
sb.append("b");
sb.append("c");
在我看来,Ex 1 将创建 5 个,Ex 2 将创建 4 个对象。
【问题讨论】:
-
第一个示例将创建一个对象,编译器可以对其进行优化。
-
示例 1 生成:
String s = "a"; s = (new StringBuilder(String.valueOf(s))).append("b").toString(); s = (new StringBuilder(String.valueOf(s))).append("c").toString(); System.err.println(s);。看起来 javac 没有优化(至少在 Java 6 中) -
如果是:“a”+“b”+“c”应该这样做。我很惊讶其他情况也没有优化。但是哦,好吧……见:nicklothian.com/blog/2005/06/09/on-java-string-concatenation
-
第一个例子,优化?我认为所有字符串都是唯一且不可变的,所以无论优化如何,它不应该是 5 个对象吗?
-
@Thihara:如果 Javac(而不是 JIT)编译器首先进入,则不会。
标签: java string object bytecode stringbuilder