2010-03-24 23 views
5

सी ++ में, यदि आपको 2 ऑब्जेक्ट्स संशोधित करने की आवश्यकता है, तो आप संदर्भ से गुजर सकते हैं। आप इसे जावा में कैसे पूरा करते हैं? मान लें कि 2 ऑब्जेक्ट्स प्राचीन प्रकार के हैं जैसे int।जावा में संदर्भ द्वारा उत्तीर्ण?

+0

यह http://stackoverflow.com/questions/589919/doe का डुप्लिकेट है एस जावा-पास-संदर्भ द्वारा – Zxaos

उत्तर

12

आप नहीं कर सकते। जावा चर के संदर्भ गुजरने का समर्थन नहीं करता है। सब कुछ मूल्य से गुजरता है।

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

0

जेनिक्स का उपयोग करके आप एक पॉइंटर क्लास बना सकते हैं जो इसे कम से कम कुछ दर्दनाक बना देगा। आप ऑब्जेक्ट में पास करते हैं, इसकी वैल्यू प्रॉपर्टी बदलते हैं और जब फ़ंक्शन आपके ऑब्जेक्ट से निकलता है तो इसमें नया मान होगा।

MyPointerClass<int> PointerClass = new MyPointerClass<int>(5); 
myFunction(PointerClass); 
System.out.println(PointerClass.Value.toString()); 

// ... 

void myFunction(myPointerClass<int> SomeValue) 
{ 
    SomeValue.Value = 10; 
} 
1

जावा संदर्भ द्वारा पारित नहीं है, लेकिन आप अभी भी उन संदर्भों से वस्तुओं (जो खुद मान द्वारा पारित कर रहे हैं) उत्परिवर्तित कर सकते हैं।

आप देख सकते हैं, आप अभी भी वस्तुओं को संशोधित कर सकते हैं (यदि वे अपरिवर्तनीय नहीं हैं); आप किसी फ़ंक्शन में पास करके संदर्भ या प्राइमेटिव को संशोधित नहीं कर सकते हैं।

बेशक, आप उन्हें किसी ऑब्जेक्ट के क्षेत्र बना सकते हैं और उन ऑब्जेक्ट्स को चारों ओर ऑब्जेक्ट्स पास कर सकते हैं और उन्हें अपनी इच्छानुसार सेट कर सकते हैं। लेकिन यह अभी भी संदर्भ द्वारा पारित नहीं है।

2

उन्हें किसी ऑब्जेक्ट में लपेटें और फिर उस ऑब्जेक्ट को विधि के पैरामीटर के रूप में पास करें।

उदाहरण के लिए, निम्नलिखित सी ++ कोड:

bool divmod(double a, double b, double & dividend, double & remainder) { 
    if(b == 0) return false; 
    dividend = a/b; 
    remainder = a % b; 
    return true; 
} 

को जावा में लिखा जा सकता है:

class DivRem { 
    double dividend; 
    double remainder; 
} 

boolean divmod(double a, double b, DivRem c) { 
    if(b == 0) return false; 
    c.dividend = a/b; 
    c.remainder = a % b; 
    return true; 
} 

जावा में अधिक मुहावरेदार शैली बना सकते हैं और विधि से इस वस्तु लौटने के लिए होगा हालांकि पैरामीटर के रूप में इसे स्वीकार करने के बजाय:

class DivRem { 
    double dividend; 
    double remainder; 
} 

DivRem divmod(double a, double b) { 
    if(b == 0) throw new ArithmeticException("Divide by zero"); 
    DivRem c = new DivRem(); 
    c.dividend = a/b; 
    c.remainder = a % b; 
    return c; 
} 
संबंधित मुद्दे