[[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 StringBuilder
tane 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, StringBuilder
bir dizi yöntem çağrısından bir dize oluşturduğum zamandır . Sonra StringBuilder
argüman alan yöntemler oluşturabilirim :
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
A kullanırken , aynı anda StringBuilder
herhangi bir kullanım için izlemelisiniz +
:
sb.append("select " + fieldName);
Bu +
, başka bir içsel StringBuilder
yaratı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 .
PreparedStatement
veya benzer bir şey kullanın : docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html