下面是一些简单的 Java 代码:
String s = new StringBuilder().append("a").append("b").append("c").toString();
我使用 JRE 1.6 对其进行编译,并在反编译的类文件中观察到以下内容:
String s = "a" + "b" + "c";
我有以下问题:
- 为什么编译器选择“+”而不是 StringBuilder?
- 我们是否有任何官方 Java 规范来证明这种行为的合理性?
- 在我们知道编译器无论如何都会改变它的情况下,使用 StringBuilder 真的有意义吗?
恰恰相反。+
for String
是使用实现的StringBuilder
(or StringBuffer
)幕后(参见http://docs.oracle.com/javase/7/docs/api/java/lang/String.html 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 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1).
因此,一旦编译完成,您的两个代码片段就无法区分。反编译器必须猜测原始形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)