[[ここにはいくつかの良い答えがありますが、それでもまだ情報が不足していることがわかります。]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
あなたが指摘するように、あなたが与える例は単純化していますが、とにかくそれを分析しましょう。ここで発生するのは、すべて定数なので、コンパイラーが実際に+
ここで機能すること"select id1, " + " id2 " + " from " + " table"
です。したがって、これは次のようになります。
return new StringBuilder("select id1, id2 from table").toString();
この場合、明らかに、を使用しても意味がありませんStringBuilder
。あなたもするかもしれません:
// the compiler combines these constant strings
return "select id1, " + " id2 " + " from " + " table";
ただし、フィールドやその他の非定数を追加する場合でも、コンパイラーは内部 を使用します。内部StringBuilder
を定義する必要はありません。
// an internal StringBuilder is used here
return "select id1, " + fieldName + " from " + tableName;
内部的には、これは次のコードとほぼ同等のコードに変わります。
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
実際にStringBuilder
直接使用する必要があるのは、条件付きコードがある場合だけです。たとえば、次のようなコードはのために必死ですStringBuilder
。
// 1 StringBuilder used in this line
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
// another StringBuilder used here
query += ' ' + where;
}
+
最初の行には、一の使用StringBuilder
インスタンス。次に、+=
は別のStringBuilder
インスタンスを使用します。それを行うのがより効率的です:
// choose a good starting size to lower chances of reallocation
StringBuilder sb = new StringBuilder(64);
sb.append("select id1, ").append(fieldName).append(" from ").append(tableName);
// conditional code
if (where != null) {
sb.append(' ').append(where);
}
return sb.toString();
私が使用するもう1つの時間StringBuilder
は、いくつかのメソッド呼び出しから文字列を構築しているときです。次に、StringBuilder
引数を取るメソッドを作成できます。
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
を使用しているときはStringBuilder
、の使用を+
同時に監視する必要があります。
sb.append("select " + fieldName);
これ+
により、別の内部StringBuilder
が作成されます。これはもちろん次のようになります。
sb.append("select ").append(fieldName);
最後に、@ TJrowderが指摘するように、常にのサイズを推測する必要がありStringBuilder
ます。これchar[]
により、内部バッファーのサイズが大きくなるときに作成されるオブジェクトの数が節約されます。
PreparedStatement
か、または類似したもの:docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html