"హాయ్, అమిగో, ఇది మళ్లీ నేనే, ఎల్లీ. పదే పదే చెబుతున్నందుకు క్షమించండి, కానీ 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మరియుబి;aమరియుబిm మరియు 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 వస్తువులు జెన్ మరియు బెత్ లోపల విలువలను మారుస్తాయి."

"మరియు మీరు ఇతర తరగతుల లోపల తరగతులను ప్రకటించవచ్చు, సరియైనదా? కూల్!"

"కానీ నాకు ఇంకా బాగా అర్థం కాలేదు."

"అన్ని సమయానికి."