जावा के पीछे यांत्रिकी स्ट्रिंग अक्षरों को स्ट्रिंग ऑब्जेक्ट्स के रूप में स्वचालित रूप से व्याख्या करने के लिए क्या हैं, क्योंकि कोई ओवरलोडेड ऑपरेटर नहीं हैं और निम्न-स्तरीय स्ट्रिंग बफर (उच्च स्तरीय स्ट्रिंगबफर सहित) के लिए कोई डिफ़ॉल्ट समर्थन नहीं है? क्या यह एक भाषा या आभासी मशीन संदर्भ है?जावा स्ट्रिंग शाब्दिक स्वचालित रूप से स्ट्रिंग ऑब्जेक्ट के रूप में व्याख्या की गई, लेकिन कैसे?
उत्तर
यह दोनों का एक छोटा सा है।
जेवीएम में रनटाइम स्टैक पर स्ट्रिंग अक्षर को लोड करने के लिए बाइट कोड हैं, और इन ऑपोड्स को जेएमवी स्पेक में निर्दिष्ट किया गया है ताकि एक उचित रूप से निर्मित स्ट्रिंग ऑब्जेक्ट को स्टैक पर दबाकर काम किया जा सके, जिनकी सामग्री कुछ स्ट्रिंग अक्षर के बराबर है वर्ग फ़ाइल। स्ट्रिंग ऑब्जेक्ट को इंटर्न करने के अलावा यह कैसे किया जाता है इसके अलावा कोई विनिर्देश नहीं है, जिसका अर्थ है कि परिवर्तन कार्यान्वयन-विशिष्ट है।
भाषा स्तर पर, कंपाइलर किसी भी स्ट्रिंग अक्षर का इलाज कर सकता है जो इसे टाइपिंग के उद्देश्यों के लिए एक पूर्ण स्ट्रिंग ऑब्जेक्ट के रूप में देखता है, और उसके बाद कक्षा फ़ाइल में शाब्दिक और उचित बाइटकोड लिख सकता है।
जावा वास्तव में कुछ अधिभारित ऑपरेटरों के पास है। उदाहरण के लिए, +
स्ट्रिंग ऑब्जेक्ट्स के साथ-साथ int, float, और अन्य संख्यात्मक प्रकारों पर भी लागू किया जा सकता है। प्रत्येक मामले में, वापसी प्रकार को +
के प्रत्येक पक्ष पर अभिव्यक्ति के प्रकार द्वारा परिभाषित किया जाता है। हालांकि, सभी अधिभारित ऑपरेटरों को भाषा में पूर्वनिर्धारित किया गया है; प्रोग्रामर के पास किसी अन्य को परिभाषित करने के लिए भाषा में कोई तंत्र नहीं है। विवरण के लिए language specification देखें।
जो भी इसे कम करता है ... समझाने की देखभाल क्यों? –
मुझे नहीं, क्षमा करें। मैं यह सुझाव देने के लिए नीचे आ गया कि किसी ने इसे नष्ट करने और धागे के नए उदाहरण बनाने के बजाय धागे को रोक दिया और फिर से शुरू किया, और कोई भी यह बताने के लिए नहीं आया कि क्यों। – TurtleToes
@ टर्टलटोस: मैंने एक टिप्पणी लिखी है कि आपका जवाब भयानक क्यों था (लेकिन मैं वह नहीं था जिसने आपको नीचे गिरा दिया, शायद वे खुद को दिखाएंगे या नहीं)। –
मूल रूप से संकलक आपके कोड को फिर से लिखता है।
z = new StringBuffer(z).append(" with some more in it").toString();
अब एक concat के लिए इस एक वस्तु है:
z += " with some more in it";
के रूप में संकलित किया गया है:
String x = "Some String";
संयोजन के लिए, यह StringBuffer संलग्न विधि के लिए बस वाक्यात्मक चीनी, इस यानी है बनाया गया और 2 विधि कॉल, इसलिए यदि आप लूप के अंदर एक बहुत लंबी स्ट्रिंग बना रहे हैं, तो यह लिखने के लिए एफएआर अधिक कुशल है:
StringBuilder buf = new StringBuilder(); // Not synchronized so quicker than StringBuffer
while (condition is true)
buf.append(...);
String z = buf.toString();
बजाय:
String z = "";
while (condition is true)
z += "...";
संपादित करें: हटाया गलत कोड उदाहरण ...
नहीं, "मैं एक स्ट्रिंग हूं" '_ot_' नया स्ट्रिंग है (" मैं एक स्ट्रिंग हूं ")'; यदि ऐसा होता है, तो आपको 'स्ट्रिंग' कन्स्ट्रक्टर को असीमित रिकर्सिव कॉल मिलेंगे! –
एक मामूली विस्तार - सभी स्ट्रिंग अक्षरों को प्रशिक्षित किया जाता है, इसलिए एक स्ट्रिंग अक्षर एक नई स्ट्रिंग बनाने जैसा ही नहीं है। यह एक ही मूल्य के साथ सभी स्ट्रिंग अक्षरों द्वारा साझा स्ट्रिंग इंस्टेंस को वापस रखेगा। – templatetypedef
@templatetypedef: असल में, यह एक महत्वपूर्ण जानकारी है। मैं कभी-कभी उस कोड को लिखता हूं जो उस संपत्ति का शोषण करता है: उदाहरण के लिए, यदि मुझे पता है कि मैं दो चर की तुलना कर रहा हूं जो मुझे पता है स्ट्रिंग अक्षर हैं या अन्यथा आंतरिक हैं, तो मैं पहचान तुलना का उपयोग करता हूं। –
- 1. स्वचालित रूप से स्ट्रिंग शाब्दिक का होना शामिल
- 2. मैपोडब ऑब्जेक्ट मैपिंग स्वचालित रूप से स्ट्रिंग से और
- 3. स्वचालित रूप से C# ऑब्जेक्ट
- 4. एंड्रॉइड: टेक्स्ट व्यू स्वचालित रूप से स्ट्रिंग
- 5. जावा एक तुलनित्र ऑब्जेक्ट के रूप में स्ट्रिंग तुलना करें
- 6. गतिशील रूप से स्ट्रिंग
- 7. स्वचालित रूप से जावा
- 8. स्ट्रिंग शाब्दिक और ऑब्जेक्ट वैल्यू
- 9. स्ट्रिंग शाब्दिक
- 10. स्ट्रिंग अक्षर को विधियों के लिए तर्क के रूप में
- 11. स्ट्रिंग शाब्दिक
- 12. जावास्क्रिप्ट कोड, समाप्त नहीं की गई स्ट्रिंग शाब्दिक
- 13. जावा शाब्दिक स्ट्रिंग: रनटाइम पर गलत वर्णमाला
- 14. उचित रूप से जावा स्ट्रिंग अक्षर
- 15. जावास्क्रिप्ट गतिशील रूप से स्ट्रिंग
- 16. पायथन: स्ट्रिंग शाब्दिक से कच्चे स्ट्रिंग को शाब्दिक रूपांतरित करने के लिए कैसे?
- 17. स्वचालित रूप से सार्वजनिक (जावा)
- 18. जावा की स्ट्रिंग # इंटर्न() विधि कैसे लागू की गई है?
- 19. स्वचालित रूप से अनुपलब्ध फ़ोल्डर कैसे बनाएं?
- 20. अजगर कच्चे शाब्दिक स्ट्रिंग
- 21. स्ट्रिंग शाब्दिक बाइट
- 22. सही स्ट्रिंग T-SQL स्ट्रिंग शाब्दिक
- 23. आंशिक रूप से List.contains (स्ट्रिंग)
- 24. प्रोग्राम्सिक रूप से एक स्ट्रिंग
- 25. एक स्ट्रिंग शाब्दिक
- 26. कैसे स्वचालित रूप से सरणी
- 27. जावास्क्रिप्ट - एक स्ट्रिंग शाब्दिक
- 28. गतिशील रूप से जावा
- 29. एक स्ट्रिंग शाब्दिक
- 30. SQLite, स्ट्रिंग शाब्दिक
वहाँ किसी भी तरह से एक सीखने के रूप में जावा बाइट कोड में प्रोग्राम (विधानसभा भाषा के कुछ प्रकार के लिए समान) लिखने के लिए है व्यायाम? – TurtleToes
@ टर्टलटोस: हां, [जैस्मीन] का उपयोग करके (http://jasmin.sourceforge.net/)। –
महान। बहुत बहुत धन्यवाद। यह दिलचस्प होगा – TurtleToes