本文介绍了Java编译器用+串联替换StringBuilder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

以下是一些简单的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";

我有以下问题:

  1. 为什么编译器会在StringBuilder上选择'+'?
  2. 我们是否有任何官方的Java规范可以证明这种行为?
  3. 在这种情况下使用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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 10:14