今天用Java Decompiler反编译一个类发现其中字符串连加的代码反编译的结果和jad的不同。
源码一般somestr = "a" + "b" + "c" + "d" ....;
jad反编译过来会自动生成一个StringBuffer,然后把各个子串append到一起。如:
somestr = (new StringBuilder(String.valueOf("a"))).append("b").append("c").append("d")....).toString();
Java Decompiler反编译的代码基本上和原来一样,有字节码查看工具看出,编译器确实对字符串相加做了优化。请在eclipse使用byte outline插件查看。但是有一种情况是例外的,如:
somestr = "a" + "b";
somestr += "c" + "d";
编译器会为每一条语句建立一个StringBuilder,像上面的情况请把两句合并成一句。