"Szia, Amigo, megint én vagyok, Ellie. Elnézést, hogy újra és újra ezt mondom, de ez a 31. századi Földön megszokott. Szeretnék további részleteket adni a referenciaváltozókról és a referenciaváltozók függvényeknek való átadásáról ( mód)."

"Készen állok."

"Remek, akkor figyeljen. A referenciaváltozók bármilyen nem primitív változók. Az ilyen változók csak objektumhivatkozást tartalmaznak (hivatkozás egy objektumra)."

"A primitív változók értékeket tartalmaznak, míg a referenciaváltozók objektumokra vagy nullára utalnak. Jól gondolom?"

"Teljesen."

– Mi az a hivatkozás?

"A tárgy és egy tárgyreferencia kapcsolata olyan, mint egy személy és a telefonszáma közötti kapcsolat. A telefonszám nem a személy, de felhívható, információ kérhető, kezelhető, ill. parancsokat ad. A hivatkozás az objektumokkal való munkavégzéshez is használható. Minden objektum hivatkozások segítségével kölcsönhatásba lép egymással."

– Mintha telefonon beszélnének egymással?

"Pontosan. Amikor egy primitív változót hozzárendel, az értéket másolja. Ha hivatkozás van hozzárendelve, akkor csak az objektum címe (a telefonszám) kerül másolásra. Maga az objektum nem kerül másolásra. "

"Rendben, értem."

"A hivatkozás még egy előnnyel jár: bármely metódusnak átadhat egy objektumhivatkozást, és ez a metódus képes lesz a hivatkozás segítségével módosítani (megváltoztatni) az objektumot metódusainak meghívásával és az objektumon belüli adatok elérésével."

1. példa
Az m és n értékek itt nem változnak.
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;
  }
}
És itt van miért.
Ez a kód analóg a bal oldali kóddal
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);
  }
}

"Csak az 5 (m) és 6 (n) értékek vannak hozzárendelve a változókhozaésb;aésbsemmit sem tud (és semmilyen módon nem befolyásolja) m-ről és n-ről."

"Az igazat megvallva most már rájöttem, hogy nem értettem semmit. Mondana még néhány példát?"

"Objektumhivatkozással a következőket tehettük volna:"

2. példa
Az objektumok adatai megváltoznak ebben a kódban
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;
  }
}
És itt van miért.
Ez a kód analóg a bal oldali kóddal
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 jen-re és a beth-re való hivatkozások az a és b változókhoz vannak rendelve; a és b megváltoztatja a jen és beth objektumok értékeit."

– És deklarálhatsz osztályokat más osztályokon belül is, igaz?

– De minden máshoz még mindig nem nagyon értek.

– Mindent a kellő időben.