您的版本已經更短,更具可讀性。不需要用StringBuilder
代替,尤其是編譯器很可能會優化它以使用StringBuilder
。
如果您還檢查生成的字節碼,使用StringBuilder
和append
ing爲您的情況下的每個字符串可能導致更多的字節碼比簡單的連接。
樣的字節碼使用字符串連接:
aload_1
invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V
getstatic java/io/File/separator Ljava/lang/String;
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_2
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String;
areturn
使用StringBuilder
:
invokespecial java/lang/StringBuilder/<init>()V
astore_3
aload_3
aload_1
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
aload_3
getstatic java/io/File/separator Ljava/lang/String;
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
aload_3
aload_2
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
aload_3
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String;
areturn
通常情況下,它的效率更高在一些字符串正在修建一個循環使用StringBuilder
,或者當字符串預期通過插入或替換字符而改變時。
如果你已經測試過它,它的工作原理,然後讓你的同事建議的改變有點浪費時間。但是,最好不要寫這樣的代碼。老實說,我會用'String.format()'來寫這個 - 比'StringBuilder'更清晰。 – 2014-12-02 20:00:46