"हाय, अमिगो, मी पुन्हा आहे, एली. असे वारंवार सांगितल्याबद्दल क्षमस्व, परंतु 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 (m) आणि 6 (n), अनुक्रमे, व्हेरिएबल्सना नियुक्त केले जातातaआणिb;aआणिbm आणि n बद्दल काहीही माहित नाही (आणि कोणत्याही प्रकारे प्रभाव टाकू नका)."

"खरं सांगू, मला आता कळतंय की मला काहीच समजलं नाही. अजून काही उदाहरणं देऊ शकाल का?"

"वस्तू संदर्भासह, आम्ही खालील गोष्टी करू शकलो असतो:"

उदाहरण 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;
  }
}

"अनुक्रमे जेन आणि बेथचे संदर्भ, a आणि b व्हेरिएबल्सना दिलेले आहेत; a आणि b जेन आणि बेथ या ऑब्जेक्ट्समधील मूल्ये बदलतात."

"आणि तुम्ही इतर वर्गांच्या आत वर्ग घोषित करू शकता, बरोबर? छान!"

"पण मला अजूनही बाकी सर्व काही नीट समजत नाही."

"सर्व काही वेळेत."