"হাই, অ্যামিগো, এটা আবার আমি, এলি। বারবার বলার জন্য দুঃখিত, কিন্তু এটি 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), যথাক্রমে, ভেরিয়েবলের জন্য বরাদ্দ করা হয়এবং;এবং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 জেন এবং বেথ অবজেক্টের ভিতরের মান পরিবর্তন করে।"

"এবং আপনি অন্য ক্লাসের ভিতরে ক্লাস ঘোষণা করতে পারেন, তাই না? দুর্দান্ত!"

"কিন্তু আমি এখনও সবকিছু খুব ভালভাবে বুঝতে পারি না।"

"সব যথাসময়ে."