[[Ada beberapa jawaban yang bagus di sini tetapi saya menemukan bahwa jawaban-jawaban itu masih kurang sedikit informasi. ]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
Jadi seperti yang Anda tunjukkan, contoh yang Anda berikan adalah sederhana, tetapi mari kita analisis. Apa yang terjadi di sini adalah kompiler sebenarnya melakukan +pekerjaan di sini karena "select id1, " + " id2 " + " from " + " table"semuanya adalah konstanta. Jadi ini berubah menjadi:
return new StringBuilder("select id1, id2 from table").toString();
Dalam hal ini, jelas tidak ada gunanya menggunakan StringBuilder. Anda mungkin juga melakukan:
return "select id1, " + " id2 " + " from " + " table";
Namun, bahkan jika Anda menambahkan bidang atau non-konstanta apa pun, kompilator akan menggunakan internal StringBuilder - Anda tidak perlu mendefinisikannya:
return "select id1, " + fieldName + " from " + tableName;
Di bawah sampulnya, ini berubah menjadi kode yang kira-kira setara dengan:
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
Sungguh satu-satunya saat Anda perlu menggunakan StringBuilder secara langsung adalah ketika Anda memiliki kode bersyarat. Misalnya, kode yang terlihat seperti berikut ini sangat membutuhkan StringBuilder:
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
query += ' ' + where;
}
Di +baris pertama menggunakan satu StringBuildercontoh. Kemudian +=menggunakan StringBuildercontoh lain . Lebih efisien untuk melakukan:
StringBuilder sb = new StringBuilder(64);
sb.append("select id1, ").append(fieldName).append(" from ").append(tableName);
if (where != null) {
sb.append(' ').append(where);
}
return sb.toString();
Waktu lain yang saya gunakan StringBuilderadalah ketika saya membuat string dari sejumlah panggilan metode. Kemudian saya bisa membuat metode yang membutuhkan StringBuilderargumen:
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
Saat Anda menggunakan StringBuilder, Anda harus memperhatikan setiap penggunaan +pada saat yang sama:
sb.append("select " + fieldName);
Itu +akan menyebabkan internal lain StringBuilderdibuat. Ini tentu saja harus:
sb.append("select ").append(fieldName);
Terakhir, seperti yang ditunjukkan @TJrowder, Anda harus selalu menebak ukuran file StringBuilder. Ini akan menghemat jumlah char[]objek yang dibuat saat memperbesar ukuran buffer internal.
PreparedStatementatau yang serupa: docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html