「こんにちは、アミーゴ、また私です、エリー。何度も言って申し訳ありませんが、31 世紀の地球ではこれが慣習です。参照変数と関数への参照変数の受け渡しについて詳しく説明したいと思います (方法)。」

"準備できました。"

「わかりました。聞いてください。参照変数は、プリミティブ以外の変数です。そのような変数には、オブジェクト参照 (オブジェクトへの参照) のみが含まれます。」

「プリミティブ変数には値が含まれますが、参照変数にはオブジェクトへの参照または null が保存されます。正しいですか?」

"絶対。"

「参考資料って何ですか?」

「オブジェクトとオブジェクト参照の関係は、人とその電話番号の関係に似ています。電話番号はその人そのものではありませんが、その人に電話したり、情報を求めたり、管理したりするために使用できます。命令を出します。参照はオブジェクトを操作するためにも使用されます。すべてのオブジェクトは参照を使用して相互に作用します。

「まるで電話で話し合っているような?」

「その通りです。プリミティブ変数が代入されると、値がコピーされます。参照が代入されると、オブジェクトのアドレス (電話番号) のみがコピーされます。オブジェクト自体はコピーされません。

"はい、分かりました。"

「参照にはもう 1 つの利点があります。オブジェクト参照を任意のメソッドに渡すことができ、そのメソッドはそのメソッドを呼び出してオブジェクト内のデータにアクセスすることで、その参照を使用してオブジェクトを変更 (変更) できるようになります。」

例 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) のみが変数に割り当てられますあるb;ある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;
  }
}

「jen と beth への参照は、それぞれ変数 a と b に割り当てられます。a と b は、オブジェクト jen と beth 内の値を変更します。」

「そして、他のクラスの中でクラスを宣言することもできますよね? クールですね!」

「しかし、他のことはまだよく理解できません。」

「すべて期限内に。」