"Xin chào, Amigo, lại là tôi đây, Ellie. Xin lỗi vì đã nói đi nói lại điều đó, nhưng đó là thông lệ trên Trái đất ở thế kỷ 31. Tôi muốn cung cấp cho bạn thêm chi tiết về biến tham chiếu và chuyển biến tham chiếu cho hàm ( phương pháp)."

"Tôi đã sẵn sàng."

"Tuyệt, vậy thì hãy lắng nghe. Các biến tham chiếu là bất kỳ biến không nguyên thủy nào. Các biến như vậy chỉ chứa một tham chiếu đối tượng (tham chiếu đến một đối tượng)."

"Các biến nguyên thủy chứa các giá trị, trong khi các biến tham chiếu lưu trữ các tham chiếu đến các đối tượng hoặc null. Tôi nói đúng chứ?"

"Tuyệt đối."

"Tài liệu tham khảo là gì?"

"Mối quan hệ giữa một đối tượng và một tham chiếu đối tượng giống như mối quan hệ giữa một người và số điện thoại của cô ấy. Số điện thoại không phải là người đó, nhưng nó có thể được sử dụng để gọi cho người đó, hỏi một số thông tin, quản lý cô ấy hoặc đưa ra mệnh lệnh. Một tham chiếu cũng được sử dụng để làm việc với các đối tượng. Tất cả các đối tượng tương tác với nhau bằng cách sử dụng các tham chiếu."

"Như thể họ đang nói chuyện với nhau qua điện thoại?"

"Chính xác. Khi một biến nguyên thủy được gán, giá trị sẽ được sao chép. Nếu một tham chiếu được gán, chỉ địa chỉ của đối tượng (số điện thoại) được sao chép. Bản thân đối tượng không được sao chép. "

"Được, tôi hiểu rồi."

"Một tham chiếu mang lại cho bạn một lợi ích nữa: bạn có thể chuyển một tham chiếu đối tượng cho bất kỳ phương thức nào và phương thức đó sẽ có thể sử dụng tham chiếu đó để sửa đổi (thay đổi) đối tượng bằng cách gọi các phương thức của nó và truy cập dữ liệu bên trong đối tượng."

Ví dụ 1
Các giá trị m và n không thay đổi ở đây.
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;
  }
}
Và đây là lý do tại sao.
Mã này tương tự với mã bên trái
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);
  }
}

"Chỉ có các giá trị 5 (m) và 6 (n) tương ứng được gán cho các biếnMộtb;Mộtbkhông biết gì về (và không ảnh hưởng theo bất kỳ cách nào) m và n."

"Nói thật với bạn, bây giờ tôi nhận ra rằng tôi đã không hiểu gì cả. Bạn có thể cho tôi thêm một vài ví dụ được không?"

"Với một tham chiếu đối tượng, chúng ta có thể làm như sau:"

Ví dụ 2
Dữ liệu của các đối tượng thay đổi trong mã này
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;
  }
}
Và đây là lý do tại sao.
Mã này tương tự với mã bên trái
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;
  }
}

"Các tham chiếu đến jen và beth tương ứng được gán cho các biến a và b; a và b thay đổi các giá trị bên trong các đối tượng jen và beth."

"Và bạn có thể khai báo các lớp bên trong các lớp khác, phải không? Tuyệt!"

"Nhưng tôi vẫn chưa hiểu rõ mọi thứ khác lắm."

"Tất cả trong thời gian do."