今天用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,像上面的情況請把兩句合并成一句。