"안녕, 아미고, 또 나야, 엘리. 계속해서 그런 말을 해서 미안하지만, 31세기 지구에서는 그게 관례다. 참조 변수와 함수에 참조 변수를 넘기는 방법에 대해 좀 더 자세히 알려드리려고 한다. ( 행동 양식)."

"준비됐어."

"좋아요, 그럼 들어보세요. 참조 변수는 기본이 아닌 변수입니다. 이러한 변수에는 객체 참조(객체에 대한 참조)만 포함됩니다."

"기본 변수는 값을 포함하고 참조 변수는 개체 또는 null에 대한 참조를 저장합니다. 맞습니까?"

"전적으로."

"참고가 뭐야?"

"객체와 객체 참조 간의 관계는 사람과 전화 번호 간의 관계와 같습니다. 전화 번호는 사람이 아니지만 사람에게 전화를 걸거나, 정보를 요청하거나, 관리하거나, 명령을 내립니다. 참조는 개체 작업에도 사용됩니다. 모든 개체는 참조를 사용하여 서로 상호 작용합니다."

"전화로 서로 이야기하는 것처럼?"

"그렇습니다. 기본 변수가 할당되면 값이 복사됩니다. 참조가 할당되면 개체의 주소(전화 번호)만 복사됩니다. 개체 자체는 복사되지 않습니다. "

"좋아, 알았다."

"참조는 또 다른 이점을 제공합니다. 개체 참조를 모든 메서드에 전달할 수 있으며 해당 메서드는 참조를 사용하여 해당 메서드를 호출하고 개체 내부의 데이터에 액세스하여 개체를 수정(변경)할 수 있습니다."

예제 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;
  }
}

"jen과 beth에 대한 참조는 각각 변수 a와 b에 할당됩니다. a와 b는 개체 jen과 beth 내부의 값을 변경합니다."

"그리고 다른 클래스 안에 클래스를 선언할 수 있죠? 멋지네요!"

"그러나 나는 여전히 다른 모든 것을 잘 이해하지 못합니다."

"제 시간에 모두."