java - String Object. Clarification needed -


मेरे पास मेरे प्रोग्राम में निम्नलिखित पंक्ति है:

  jobSetupErrors.append ("abc ");  

उपरोक्त मामले में जहां नौकरीसेटअपर्स एक स्ट्रिंगबइल्डर () हैं, जो मैं देख रहा हूं वह है:

  1. नई स्ट्रिंग ऑब्जेक्ट बनाया गया है और मान "एबीसी"
  2. उस स्ट्रिंग ऑब्जेक्ट का मान मौजूदा स्ट्रिंगबिलल्डर ऑब्जेक्ट को सौंपा गया है

अगर यह सही है, और मैं 1 और लाइन जोड़ता हूं ...

 <कोड> jobSetupErrors.append ( "abc"); logger.info ( "abc");  

उपर्युक्त उदाहरण में हम स्ट्रिंग ऑब्जेक्ट अलग से 2 बार बना रहे हैं?

यदि ऐसा है, तो क्या ऐसा कुछ करना उचित होगा यह?

  स्ट्रिंग ए = "एबीसी"; jobSetupErrors.append (क); logger.info (क);  

क्या यह एक बेहतर तरीका है? कृपया सलाह दें

पता लगाने में मदद करने के लिए, मैं निम्नलिखित की तरह एक वर्ग लिखा था:

  कक्षा परीक्षण {स्ट्रिंग ए = "एबीसी"; स्ट्रिंगबिल्डर बफर = नया स्ट्रिंगबिल्डर (); सार्वजनिक शून्य सामान्य () {बफर.एपेंड ("एबीसी"); बफर.एपेंड ("एबीसी"); } सार्वजनिक शून्य चालाक () {बफर.एपेंड (ए); बफर.एपेंड (ए); }}  

यदि हम इसे संकलित करते हैं, और फिर बाइटकोक निकालने के लिए उस पर javap चलाते हैं:

  14:09:58 :: javap $ javap - सी "टेस्ट.जावा" वर्ग से संकलित टेस्ट परीक्षा में java.lang.Object {java.lang.String a; Java.lang.StringBuilder बफर; परीक्षण(); संहिता: 0: अलॉड_0 1: अभिनव # 1; // मेथड जावा / लैंग / ऑब्जेक्ट। "& Lt; init & gt;" :() वी 4: एलोडेड 5: एलडीसी # 2; // स्ट्रिंग एबीसी 7: पल्डफील्ड # 3; // फ़ील्ड: लाजावा / लैंग / स्ट्रिंग; 10: अलाउड 11: नया # 4; // कक्षा जावा / लाँग / स्ट्रिंगबिल्डर 14: डुप 15: अभिनव # 5; // विधि जावा / लैंग / स्ट्रिंगबइल्डर। "& Lt; init & gt;" :() वी 18: पुल्डफील्ड # 6; // फील्ड बफर: लाजावा / लैंग / स्ट्रिंगबिल्डर; 21: सार्वजनिक शून्य सामान्य वापसी (); कोड: 0: अलॉड_0 1: गल्डफ़ील्ड # 6; // फील्ड बफर: लाजावा / लैंग / स्ट्रिंगबिल्डर; 4: एलडीसी # 2; // स्ट्रिंग एबीसी 6: इनवॉवर्ज्यूलल # 7; // विधि जावा / लैंग / स्ट्रिंगबइल्डर.एपेंड: (लावा / लाँग / स्ट्रिंग;) जावा / लैंग / स्ट्रिंगबिल्डर; 9: पॉप 10: अलाउड 11: गल्डर फील्ड # 6; // फील्ड बफर: लाजावा / लैंग / स्ट्रिंगबिल्डर; 14: एलडीसी # 2; // स्ट्रिंग एबीसी 16: इनवॉवर्जुअल # 7; // विधि जावा / लैंग / स्ट्रिंगबइल्डर.एपेंड: (लावा / लाँग / स्ट्रिंग;) जावा / लैंग / स्ट्रिंगबिल्डर; 19: पॉप 20: सार्वजनिक शून्य चालाक लौटा (); कोड: 0: अलॉड_0 1: गल्डफ़ील्ड # 6; // फील्ड बफर: लाजावा / लैंग / स्ट्रिंगबिल्डर; 4: अलोडिड 5: गर्डरफील्ड # 3; // फ़ील्ड: लाजावा / लैंग / स्ट्रिंग; 8: इन्वोकिचरुअल # 7; // विधि जावा / लैंग / स्ट्रिंगबइल्डर.एपेंड: (लावा / लाँग / स्ट्रिंग;) जावा / लैंग / स्ट्रिंगबिल्डर; 11: पॉप 12: अलोडिड 13: गल्डर फील्ड # 6; // फील्ड बफर: लाजावा / लैंग / स्ट्रिंगबिल्डर; 16: अलाउड 17: गेस्टफ़ील्ड # 3; // फ़ील्ड: लाजावा / लैंग / स्ट्रिंग; 20: इनवॉवर्जुअल # 7; // विधि जावा / लैंग / स्ट्रिंगबइल्डर.एपेंड: (लावा / लैंग / स्ट्रिंग;) जावा / लैंग / स्ट्रिंगबिल्डर; 23: पॉप 24: रिटर्न}  

हम 2 चीजें देख सकते हैं।

सबसे पहले, सामान्य विधि उसी स्ट्रिंग इंप्रेशन का उपयोग कर रहा है दोनों कॉल (वास्तव में वही समान है, जैसा कि प्रारंभिक ब्लॉक में इस वर्ग के a सदस्य चर पर सेट किया गया है)

और दूसरी, चतुर < / कोड> विधि सामान्य से अधिक है इसका कारण यह है कि कक्षा से सम्पत्ति को प्राप्त करने के लिए अतिरिक्त कदम की आवश्यकता होती है।

तो कहानी की नैतिकता यह है कि समय का 99% जावा अपने काम पर सही तरीके से काम करता है, और ये चतुर होने की कोशिश करने की ज़रूरत है ;-) (और जब आप जानना चाहते हैं कि जावा के लिए क्या वास्तव में अच्छा उपकरण है)


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -