[[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 StringBuilder
contoh. Kemudian +=
menggunakan StringBuilder
contoh 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 StringBuilder
adalah ketika saya membuat string dari sejumlah panggilan metode. Kemudian saya bisa membuat metode yang membutuhkan StringBuilder
argumen:
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 StringBuilder
dibuat. 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.
PreparedStatement
atau yang serupa: docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html