2012-06-23 21 views
15

जावा में कोई भी स्ट्रिंग अक्षर String का निरंतर ऑब्जेक्ट है और स्ट्रिंग अक्षर पूल में संग्रहीत हो जाता है।स्ट्रिंग अक्षर को विधियों के लिए तर्क के रूप में

String शाब्दिक रूप से पारित होने के कारण String शाब्दिक पूल में संग्रहीत किया जाएगा?

उदाहरण है जब हम लिखने के लिए

,

System.out.println("Hello"); 

या

anyobj.show("Hello"); 

एक String "हैलो" बनाया जाएगा और संग्रहीत String शाब्दिक पूल में?

क्या स्ट्रिंग शाब्दिक पूल की सामग्री मुद्रित करने का कोई तरीका है?

+3

तर्क के रूप में पारित स्ट्रिंग अक्षर भी स्ट्रिंग अक्षर हैं, इसलिए: हाँ। वे अलग क्यों होंगे? यह तब होता है जब स्ट्रिंग बनाई जाती है। कोई फर्क नहीं पड़ता कि इसके साथ क्या होता है (आप इसके साथ क्या करते हैं) बाद में। – Thilo

+2

आप 'javap' कमांड के साथ .class की प्रतीक तालिका में सभी स्ट्रिंग अक्षर मुद्रित कर सकते हैं। यह स्ट्रिंग अक्षर का सारांश देगा जो कोड में उपयोग किया जाता है। – nhahtdh

उत्तर

20

हर बार जब आप एक स्ट्रिंग अपने कोड में शाब्दिक (भले ही) संकलक प्रतीक तालिका में कि स्ट्रिंग जगह है और यह हर बार इसे कहीं एक ही स्ट्रिंग का सामना करना पड़ता ही फ़ाइल में दर्शाएंगे का उपयोग करें। बाद में यह स्ट्रिंग निरंतर पूल में रखी जाएगी। यदि आप उस स्ट्रिंग को किसी अन्य विधि में पास करते हैं, तो यह अभी भी एक ही संदर्भ का उपयोग करता है। स्ट्रिंग अपरिवर्तनीय है इसलिए उन्हें पुन: उपयोग करना सुरक्षित है। javap -c -verbose साथ

public class Test { 

    public void foo() { 
     bar("Bar"); 
    } 

    public void bar(String s) { 
     System.out.println(s.equals("Bar")); 
    } 

} 

decompiling के बाद आप निम्नलिखित बाहर मिल जाएगा:

एक उदाहरण के रूप में इस कार्यक्रम लो

const #2 = String #19; // Bar 
//... 
const #19 = Asciz Bar; 


public void foo(); 
    //... 
    1: ldC#2; //String Bar 


public void bar(java.lang.String); 
    //... 
    4: ldC#2; //String Bar 

निरंतर पूल में दो प्रविष्टियों के होते हैं: String के लिए एक (#2) वास्तविक पात्रों का संदर्भ (#19)।

5

स्ट्रिंग पूल में संग्रहीत विधियों के तर्क के रूप में पारित स्ट्रिंग अक्षर क्या होगा?

बेशक। आप उन्हें अलग होने की उम्मीद क्यों करेंगे?

1

स्ट्रिंग शाब्दिक पूल का निरीक्षण करने के लिए, @Puneet a tool for that लिखा है।

संबंधित मुद्दे