2013-08-23 7 views
5

में एक ही ऑब्जेक्ट को इंगित करते हैं, मैं एक जीयूआई प्रोग्राम विकसित कर रहा हूं, जहां मैंने कक्षाएं बनाई हैं, क्लस्टर एक्शनलिस्टनर, कार्यक्षमता के अनुसार। मेरा सवाल यह है कि JVM JButtons को कैसे संभालता है, जिसमें एक ही एक्शनलिस्टर ने उन्हें जोड़ा है।जावा, संदर्भ चर जो स्मृति

पहले; मुझे पता है कि JVM स्मृति को सहेज सकता है, दो संदर्भ चर जो एक समान स्ट्रिंग (उदाहरण के लिए) को इंगित करता है, स्मृति में एक ही स्ट्रिंग ऑब्जेक्ट को इंगित करता है।

public class Example { 
    String str1 = "SomeString"; 
    String str2 = "SomeString"; 
} 

अब, मेरा प्रश्न यह है: यदि मेरे पास 5 जेबटन हैं, तो कहें। सभी बटनों में वही एक्शनलिस्टर जोड़ा जाता है। जब कार्यक्रम चलाया जाता है, तो क्या उनके पास एक ही कक्षा के 5 अलग-अलग, समान, इंस्टेंस जोड़े जाएंगे? या क्या JVM कुछ ऐसा ही करेगा (ऊपर उल्लिखित)?

  • अग्रिम धन्यवाद :)
+0

यदि आप हमें दिखाते हैं कि आप क्या कर रहे हैं तो हम आपको बता सकते हैं कि क्या होगा। या आप इसे अपने लिए जांच सकते हैं। आपका प्रश्न भ्रमित है - यदि आप एक ही एक्शनलिस्टर ऑब्जेक्ट को पांच अलग-अलग बटनों पर पास करते हैं, तो आपको लगता है कि यह पांच वस्तुओं में क्यों विभाजित होगा? –

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मेरे उदाहरण में, मेरा मतलब था; अगर मैं स्पष्ट रूप से पांच अलग-अलग बटनों में पांच अलग-अलग ऑब्जेक्ट जोड़ता हूं - क्या JVM मेमोरी स्पेस को अनुकूलित करेगा, और उन्हें एक ही ऑब्जेक्ट साझा करने देगा। –

+0

उस मामले में, नहीं। JVM इस तरह की वस्तुओं को मर्ज नहीं करता है। स्ट्रिंग्स एक विशेष मामला है। हालांकि, आप कई बटनों के लिए एक ही एक्शनलिस्टर का उपयोग कर सकते हैं। –

उत्तर

4

अच्छा, यह वास्तव में इस पर निर्भर करता है कि आपने ActionListeners कैसे बनाया है। आप

button1.addActionListener(new ActionListener() { 
    .... 
}); 
.... 
button5.addActionListener(new ActionListener() { 
    .... 
}); 

या

ActionListener al= new ActionListener() { 
    .... 
}; 
button1.addActionListener(al); 
.... 
button5.addActionListener(al); 

किया था, तो पहले मामले में आप, सच, 5 अलग अलग कार्रवाई श्रोताओं की है। लेकिन दूसरे में आपके पास केवल एक है। आप केवल एक कब प्राप्त कर सकते हैं? जब यह वही वही वस्तुएं करता है।

+0

पहला अलग ऑब्जेक्ट होगा, और दूसरा वही ऑब्जेक्ट होगा, सही? – shieldgenerator7

+0

उत्तर देने के लिए धन्यवाद। मैं आपके पहले उदाहरण में जो कुछ भी उल्लेख करता हूं वह कर रहा हूं - और अब जब आप अंतिम उदाहरण का जिक्र करते हैं, तो मुझे आश्चर्य हुआ कि मैंने ऐसा नहीं किया। लेकिन जैसा कि मेरे प्रश्न उदाहरण में दिखाया गया है; मेरे विचार मुख्य रूप से थे कि क्या JVM उठा सकता है, कि कई जेबटन को समान वस्तुएं दी गई हैं, और इसलिए उन्हें साझा करने दें। –

+0

यह एक बहुत अच्छा सवाल है। और जवाब आसान नहीं है। शायद बस इतना स्मार्ट नहीं है? हमारे लिए कुछ काम छोड़ना? –

3

यह निर्भर करता है।

यह उन्हें एक ही उदाहरण देगा।

ActionListener al = new ActionListener() { ... }; 
button.addActionListener(al); 
button2.addActionListener(al); 
... 

जबकि यह उन्हें स्वयं ही देगा।

button.addActionListener(new ActionListener() { ... }); 
button2.addActionListener(new ActionListener() { ... }); 
1

मेरा मानना ​​है कि यह सभी 5 बटनों पर एक ही एक्शनलिस्टर ऑब्जेक्ट को पास करेगा। यदि आप सच जानना चाहते हैं, तो मेरा सुझाव है कि आप इसे अपने लिए जांचें

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