[[यहां कुछ अच्छे जवाब हैं लेकिन मुझे लगता है कि उनमें अभी भी थोड़ी जानकारी की कमी है। ]]
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
सीधे उपयोग करने की आवश्यकता होती है, जब आपके पास सशर्त कोड होता है। उदाहरण के लिए, कोड जो निम्नलिखित की तरह दिखता है 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();
दूसरी बार 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