जावा में, एक ऑब्जेक्ट संदर्भ के लिए एक सरणी निर्दिष्ट करना संभव है।

class Sample{
     public void access(){
     int a[]= {1,2,3,4};
     Object oRef = a;
  }
}

किसी सरणी को संदर्भित करने के लिए संदर्भ के लिए इसका क्या अर्थ है? एक सरणी कई तत्वों की है जबकि एक संदर्भ एक तत्व है। तो इस संदर्भ का अर्थ क्या है? दूसरा प्रश्न यह है कि चूंकि किसी सरणी के संदर्भ को निर्दिष्ट करना संभव है, क्या संदर्भ का उपयोग करके सरणी के तत्वों तक पहुंचने का एक तरीका है?

3
kauray 27 नवम्बर 2015, 08:24

4 जवाब

सबसे बढ़िया उत्तर

अपने प्रश्नों के उत्तर से शुरू करने से पहले, यह स्पष्ट कर दें कि जावा में सरणियाँ "ऑब्जेक्ट" हैं। इसलिए यदि आप int a[]= {1,2,3,4}; कहते हैं, तो आप int सरणी प्रकार का एक ऑब्जेक्ट बना रहे हैं, और उस ऑब्जेक्ट को संदर्भित करने के लिए, आप a संदर्भ का उपयोग करेंगे। तो अब, अपने प्रश्नों की अनुमति देता है:

1) किसी सरणी को संदर्भित करने के लिए संदर्भ के लिए इसका क्या अर्थ है? एक सरणी कई तत्वों की है जबकि एक संदर्भ एक तत्व है। तो इस संदर्भ का अर्थ क्या है?

enter image description here

उपरोक्त छवि में, a एक संदर्भ है, जो स्टैक पर संग्रहीत है, जबकि वास्तविक सरणी, अर्थात। जिस ऑब्जेक्ट को a संदर्भित किया जाता है, उसे ढेर पर संग्रहीत किया जाता है। प्रत्येक सरणी प्रकार के लिए एक वर्ग है, इसलिए int[] के लिए एक वर्ग है। यदि आप उत्सुक हैं, तो यहां एक कोड स्निपेट है जो मेरे उपरोक्त कथन को प्रमाणित करेगा:

public static void main(String[] args)
{
    test(int[].class);
}

static void test(Class clazz)
{
    System.out.println(clazz.getName());
    System.out.println(clazz.getSuperclass());
    for(Class face : clazz.getInterfaces())
        System.out.println(face);
}

आशा है कि आपके दोनों सवालों के जवाब देंगे।

1
Community 23 मई 2017, 11:59

नहीं, आप संदर्भ oRef का उपयोग करके सरणी के तत्वों तक नहीं पहुंच सकते। जावा में सब कुछ आदिम को छोड़कर एक object है, इसलिए किसी सरणी को संदर्भित करने के लिए आपके पास ऑब्जेक्ट का संदर्भ हो सकता है।

लेकिन आप पदानुक्रम में ऊपर जा रहे हैं ताकि आप सरणी i, e के सभी लाभों को खो देंगे। स्थिति और सभी को निर्दिष्ट करके elements तक पहुँचना।

अब इस reference का उपयोग करके आप ऑब्जेक्ट के लिए उपलब्ध नंगे न्यूनतम तरीकों तक पहुंच सकते हैं यानी स्ट्रींग ()। बराबर () आदि।

0
Siyual 18 पद 2015, 20:21

सभी सरणियों को वस्तु के उदाहरण माना जाता है, इसलिए किसी भी सरणी को एक व्यापक रूपांतरण के माध्यम से वस्तु मूल्य में परिवर्तित किया जा सकता है। एक डाली के साथ एक संकीर्ण रूपांतरण ऐसे ऑब्जेक्ट मान को एक सरणी में वापस बदल सकता है।

For example:
Object o = new int[] {1,2,3};  // Widening conversion from array to Object
int[] a = (int[]) o;           // Narrowing conversion back to array 

दूसरे प्रश्न के लिए, किसी सरणी के संदर्भ को केवल तभी असाइन करना संभव है जब आप नीचे दिए गए अनुसार सरणी (int [] कास्टिंग) का ऑब्जेक्ट वापस असाइन करते हैं, पूर्णांक सरणी c [] के लिए ORef असाइन करने के बाद, आप तत्वों का उपयोग कर सकते हैं एक सरणी के।

int a[]= {1,2,3,4};
Object oRef = a;
int c[] = (int[])oRef;
System.out.println("element of c:"+c[0]);
0
Priya 27 नवम्बर 2015, 06:21

एक बार जब आप किसी अन्य संदर्भ (किसी भी संकलन त्रुटियों के बिना) के उदाहरण का उल्लेख करना शुरू करते हैं, तो एक और संदर्भ उस दायरे में उस उदाहरण के प्रकार बन जाता है। उदाहरण के लिए, निम्नलिखित स्निपेट पर विचार करें

class B extends A{}

Class Test{

B instance = new B(); //line 3
A refOfA = (A) instance; //line 4
}

अब पंक्ति 3 पर उदाहरण वर्ग B का एक उदाहरण है और आवृत्ति का प्रकार B है। पंक्ति 4 पर, उदाहरण अभी भी कक्षा B का एक उदाहरण है, लेकिन अब A को टाइपकास्ट किया गया है और उस उदाहरण का प्रकार A हो गया है तो वास्तव में, आप रिफॉर्फ का उपयोग करके ए के सदस्यों तक पहुंच सकते हैं।

जब आप किसी ऑब्जेक्ट रेफरेंस के साथ एरे का जिक्र कर रहे हैं, तो एक समान बात होती है।

आप गैंग ऑफ़ फोर डिज़ाइन पैटर्न की किताब से ओवरराइडिंग, ओवरलोडिंग और इंटरफ़ेस के प्रकार और ऑब्जेक्ट ओरिएंटेड कॉन्सेप्ट्स आदि के बारे में चर्चा करना चाह सकते हैं।

0
Atul 27 नवम्बर 2015, 06:07