[[Burada bazı iyi cevaplar var ama hala biraz bilgiden yoksun olduklarını görüyorum. ]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
Sizin de belirttiğiniz gibi, verdiğiniz örnek basit ama yine de analiz edelim. Burada olan şey, derleyicinin aslında buradaki +işi yapmasıdır çünkü "select id1, " + " id2 " + " from " + " table"hepsi sabittir. Yani bu şuna dönüşüyor:
return new StringBuilder("select id1, id2 from table").toString();
Bu durumda, elbette, kullanmanın bir anlamı yok StringBuilder. Sen de yapabilirsin:
return "select id1, " + " id2 " + " from " + " table";
Ancak, herhangi bir alanı veya sabit olmayan başka bir alanı ekliyor olsanız bile, derleyici bir dahili kullanır - bir StringBuildertane tanımlamanıza gerek yoktur:
return "select id1, " + fieldName + " from " + tableName;
Kapakların altında bu, yaklaşık olarak aşağıdakilere eşdeğer bir koda dönüşür:
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
Gerçekten StringBuilder doğrudan kullanmanız gereken tek zaman koşullu kodunuz olduğu zamandır . Örneğin, aşağıdaki gibi görünen kod, bir için çaresizdir StringBuilder:
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
query += ' ' + where;
}
+İlk hat içinde bir kullanan StringBuilderörneği. Sonra +=başka bir StringBuilderörnek kullanır . Şunları yapmak daha etkilidir:
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();
A'yı kullandığım başka bir zaman, StringBuilderbir dizi yöntem çağrısından bir dize oluşturduğum zamandır . Sonra StringBuilderargüman alan yöntemler oluşturabilirim :
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
A kullanırken , aynı anda StringBuilderherhangi bir kullanım için izlemelisiniz +:
sb.append("select " + fieldName);
Bu +, başka bir içsel StringBuilderyaratılmasına neden olacaktır . Bu elbette şöyle olmalıdır:
sb.append("select ").append(fieldName);
Son olarak, @TJrowder'ın işaret ettiği gibi, her zaman StringBuilder. Bu char[], dahili tamponun boyutunu büyütürken oluşturulan nesnelerin sayısından tasarruf sağlayacaktır .
PreparedStatementveya benzer bir şey kullanın : docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html