问题描述
以下是一些简单的Java代码:
Here's some simple Java code:
String s = new StringBuilder().append("a").append("b").append("c").toString();
我使用JRE 1.6进行编译,并且在反编译的类文件中观察到以下内容:
I compile it with JRE 1.6, and I observe the following in the decompiled class file:
String s = "a" + "b" + "c";
我有以下问题:
- 为什么编译器会在StringBuilder上选择'+'?
- 我们是否有任何官方的Java规范可以证明这种行为?
- 在这种情况下使用StringBuilder真的有意义吗?在这种情况下,我们知道编译器仍将对其进行更改?
推荐答案
反之亦然. String
的 +
是使用幕后的 StringBuilder
(或 StringBuffer
)实现的(请参见或 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1 ).
It's the other way round. +
for String
is implemented using StringBuilder
(or StringBuffer
) behind the scenes (see http://docs.oracle.com/javase/7/docs/api/java/lang/String.html or http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1).
因此,一旦它们被编译,您的两个代码片段是无法区分的.反编译器必须对原始格式进行猜测.
Thus, once they're compiled, your two code snippets are indistinguishable. The decompiler has to make a guess at the original form.
这篇关于Java编译器用+串联替换StringBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!