[[มีคำตอบดีๆอยู่ที่นี่ แต่ฉันพบว่าพวกเขายังขาดข้อมูลอยู่เล็กน้อย ]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
ดังที่คุณชี้ให้เห็นตัวอย่างที่คุณยกมาเป็นเรื่องง่าย แต่ลองวิเคราะห์กันดู สิ่งที่เกิดขึ้นที่นี่คือคอมไพเลอร์+
ทำงานที่นี่จริง ๆเพราะ"select id1, " + " id2 " + " from " + " table"
เป็นค่าคงที่ทั้งหมด สิ่งนี้จึงกลายเป็น:
return new StringBuilder("select id1, id2 from table").toString();
StringBuilder
ในกรณีนี้เห็นได้ชัดว่ามีจุดในการใช้ไม่มี คุณอาจทำ:
return "select id1, " + " id2 " + " from " + " table";
อย่างไรก็ตามแม้ว่าคุณจะต่อท้ายฟิลด์ใด ๆ หรือค่าคงที่อื่น ๆ คอมไพเลอร์ก็จะใช้ภายใน StringBuilder
- คุณไม่จำเป็นต้องกำหนดฟิลด์ใดฟิลด์หนึ่ง:
return "select id1, " + fieldName + " from " + tableName;
ภายใต้ฝาปิดสิ่งนี้จะกลายเป็นรหัสที่เทียบเท่ากับ:
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
ครั้งเดียวที่คุณต้องใช้StringBuilder
โดยตรงคือเมื่อคุณมีรหัสเงื่อนไข ตัวอย่างเช่นโค้ดที่มีลักษณะดังต่อไปนี้หมดหวังสำหรับ a StringBuilder
:
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
query += ' ' + where;
}
+
ในบรรทัดแรกจะใช้อย่างใดอย่างหนึ่งStringBuilder
เช่น จากนั้น+=
ใช้StringBuilder
อินสแตนซ์อื่น มีประสิทธิภาพมากกว่าที่จะทำ:
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 StringBuilder
คือเมื่อฉันสร้างสตริงจากการเรียกเมธอดจำนวนมาก จากนั้นฉันสามารถสร้างเมธอดที่ใช้StringBuilder
โต้แย้ง:
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
เมื่อคุณใช้ a StringBuilder
คุณควรดูการใช้งานใด ๆ+
ในเวลาเดียวกัน:
sb.append("select " + fieldName);
นั่น+
จะทำให้เกิดการStringBuilder
สร้างภายในขึ้นมาใหม่ สิ่งนี้ควรเป็น:
sb.append("select ").append(fieldName);
สุดท้ายดังที่ @TJrowder ชี้ให้เห็นคุณควรคาดเดาขนาดของไฟล์StringBuilder
. ซึ่งจะช่วยประหยัดจำนวนchar[]
วัตถุที่สร้างขึ้นเมื่อมีการขยายขนาดของบัฟเฟอร์ภายใน
PreparedStatement
หรือสิ่งที่คล้ายกัน: docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html