"Hallo, Amigo, ik ben het weer, Ellie. Sorry dat ik dat steeds weer zeg, maar het is gebruikelijk op aarde in de 31e eeuw. Ik wil je graag meer details geven over referentievariabelen en het doorgeven van referentievariabelen aan functies ( methoden)."

"Ik ben klaar."

"Goed, luister dan. Referentievariabelen zijn alle niet-primitieve variabelen. Dergelijke variabelen bevatten alleen een objectreferentie (een verwijzing naar een object)."

"Primitieve variabelen bevatten waarden, terwijl referentievariabelen verwijzingen naar objecten of null opslaan. Heb ik gelijk?"

"Absoluut."

"Wat is een referentie?"

"De relatie tussen een object en een objectreferentie is als de relatie tussen een persoon en haar telefoonnummer. Het telefoonnummer is niet de persoon, maar het kan worden gebruikt om de persoon te bellen, om informatie te vragen, haar te beheren of geef opdrachten. Een referentie wordt ook gebruikt om met objecten te werken. Alle objecten communiceren met elkaar door middel van referenties."

'Alsof ze met elkaar praten via de telefoon?'

"Precies. Als een primitieve variabele wordt toegewezen, wordt de waarde gekopieerd. Als een referentie wordt toegewezen, wordt alleen het adres van het object (het telefoonnummer) gekopieerd. Het object zelf wordt niet gekopieerd. "

"Oke, ik snap het."

"Een referentie geeft je nog een voordeel: je kunt een objectreferentie doorgeven aan elke methode, en die methode kan de referentie gebruiken om het object te wijzigen (wijzigen) door zijn methoden aan te roepen en toegang te krijgen tot gegevens binnen het object."

Voorbeeld 1
De waarden m en n veranderen hier niet.
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;
  }
}
En hier is waarom.
Deze code is analoog aan de code links
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);
  }
}

"Alleen de waarden 5 (m) respectievelijk 6 (n) worden toegewezen aan variabelenAEnB;AEnBniets weten over (en op geen enkele manier invloed hebben op) m en n."

'Eerlijk gezegd realiseer ik me nu dat ik er niets van begreep. Kun je me nog een paar voorbeelden geven?'

"Met een objectreferentie hadden we het volgende kunnen doen:"

Voorbeeld 2
De gegevens van de objecten veranderen in deze code
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;
  }
}
En hier is waarom.
Deze code is analoog aan de code links
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;
  }
}

"Verwijzingen naar respectievelijk Jen en Beth worden toegewezen aan de variabelen a en b; a en b veranderen de waarden binnen de objecten Jen en Beth."

"En je kunt klassen declareren binnen andere klassen, toch? Cool!"

"Maar al het andere begrijp ik nog steeds niet zo goed."

"Alles op zijn tijd."