"हाय, अमीगो, मैं फिर से बोल रहा हूं, ऐली। बार-बार ऐसा कहने के लिए क्षमा चाहता हूं, लेकिन यह 31वीं सदी में पृथ्वी पर प्रथागत है। मैं आपको रेफरेंस वेरिएबल्स और फंक्शन्स के लिए रेफरेंस वेरिएबल्स पास करने के बारे में अधिक जानकारी देना चाहता हूं ( तरीके)।"

"मैं तैयार हूं।"

"महान, फिर सुनो। संदर्भ चर कोई भी गैर-आदिम चर हैं। ऐसे चर में केवल एक वस्तु संदर्भ (किसी वस्तु का संदर्भ) होता है।"

"आदिम चर में मान होते हैं, जबकि संदर्भ चर वस्तुओं या अशक्त के संदर्भों को संग्रहीत करते हैं। क्या मैं सही हूँ?"

"बिल्कुल।"

"क्या संदर्भ है?"

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

"जैसे कि वे फोन पर एक दूसरे से बात कर रहे थे?"

"बिल्कुल सही। जब एक प्रिमिटिव वेरिएबल असाइन किया जाता है, तो वैल्यू कॉपी की जाती है। यदि कोई रेफरेंस असाइन किया जाता है, तो केवल ऑब्जेक्ट का पता (फ़ोन नंबर) कॉपी किया जाता है। ऑब्जेक्ट को कॉपी नहीं किया जाता है। "

"ठीक है, मुझे समझ आ गया।"

"एक संदर्भ आपको एक और लाभ देता है: आप किसी भी विधि के लिए एक वस्तु संदर्भ पारित कर सकते हैं, और वह विधि वस्तु के तरीकों को कॉल करके और वस्तु के अंदर डेटा तक पहुँचने के लिए संदर्भ को संशोधित (बदल) करने में सक्षम होगी।"

उदाहरण 1
यहाँ m और n के मान नहीं बदलते हैं।
public class References
{
  public static void main (String[] args)
  {
    int m = 5;
    int n = 6;

    System.out.println("M=" + m + " N=" + n);
    swap(m, n);
    System.out.println("M=" + m + " N=" + n);
  }

  private static void swap(int a, int b)
  {
    int c = a;
    a = b;
    b = c;
  }
}
और यहाँ क्यों है।
यह कोड बाईं ओर के कोड के समान है
public class References
{
  public static void main (String[] args)
  {
    int m = 5;
    int n = 6;

    System.out.println("M=" + m + " N=" + n);
    int a = m, b = n;

    int c = a;
    a = b;
    b = c;

    System.out.println("M=" + m + " N=" + n);
  }
}

"केवल मान 5 (एम) और 6 (एन), क्रमशः चर के लिए असाइन किए गए हैंऔरबी;औरबीएम और एन के बारे में कुछ नहीं जानते (और किसी भी तरह से प्रभावित नहीं करते हैं)।

"सच कहूँ तो, अब मुझे एहसास हुआ कि मुझे कुछ भी समझ नहीं आया। क्या आप मुझे कुछ और उदाहरण दे सकते हैं?"

"एक वस्तु संदर्भ के साथ, हम निम्नलिखित कर सकते थे:"

उदाहरण 2
इस कोड में वस्तुओं का डेटा बदल जाता है
public class Primitives
{
  public static void main(String[] args)
  {
    Student jen = new Student();
    jen.name = "Jen";
    jen.age = 21;

    Student beth = new Student();
    beth.name = "Beth";
    beth.age = 15;

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);

    ageSwap(jen, beth);

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);
  }

  private static void ageSwap(Student a,
                                    Student b)
  {
    int c = a.age;
    a.age = b.age;
    b.age = c;
  }

  static class Student
  {
    String name;
    int age;
  }
}
और यहाँ क्यों है।
यह कोड बाईं ओर के कोड के समान है
public class Primitives
{
  public static void main(String[] args)
  {
    Student jen = new Student();
    jen.name = "Jen";
    jen.age = 21;

    Student beth = new Student();
    beth.name = "Beth";
    beth.age = 15;

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);

    Student a = jen, b = beth;

    int c = a.age;
    a.age = b.age;
    b.age = c;

    System.out.println("Jen is " + jen.age);
    System.out.println("Beth is " + beth.age);
  }





  static class Student
  {
    String name;
    int age;
  }
}

"जेन और बेथ के सन्दर्भ, क्रमशः चर ए और बी को निर्दिष्ट किए जाते हैं; ए और बी वस्तुओं जेन और बेथ के अंदर मूल्यों को बदलते हैं।"

"और आप अन्य वर्गों के अंदर कक्षाओं की घोषणा कर सकते हैं, है ना? कूल!"

"लेकिन मैं अभी भी बाकी सब कुछ बहुत अच्छी तरह से नहीं समझता।"

"पूरे समय में।"