"Hej, Amigo, det er mig igen, Ellie. Undskyld at jeg siger det igen og igen, men det er sædvanligt på Jorden i det 31. århundrede. Jeg vil gerne give dig flere detaljer om referencevariabler og videregivelse af referencevariabler til funktioner ( metoder)."

"Jeg er klar."

"Fint, så lyt. Referencevariabler er alle ikke-primitive variabler. Sådanne variabler indeholder kun en objektreference (en reference til et objekt)."

"Primitive variabler indeholder værdier, mens referencevariable gemmer referencer til objekter eller nul. Har jeg ret?"

"Absolut."

"Hvad er en reference?"

"Forholdet mellem et objekt og en objektreference er ligesom forholdet mellem en person og hendes telefonnummer. Telefonnummeret er ikke personen, men det kan bruges til at ringe til personen, bede om nogle oplysninger, administrere hende eller give ordrer. En reference bruges også til at arbejde med objekter. Alle objekter interagerer med hinanden ved hjælp af referencer."

"Som om de talte med hinanden i telefonen?"

"Nøjagtigt. Når en primitiv variabel tildeles, kopieres værdien. Hvis der tildeles en reference, kopieres kun adressen på objektet (telefonnummeret). Selve objektet kopieres ikke. "

"OK, jeg forstår."

"En reference giver dig endnu en fordel: du kan videregive en objektreference til enhver metode, og den metode vil være i stand til at bruge referencen til at ændre (ændre) objektet ved at kalde dets metoder og få adgang til data inde i objektet."

Eksempel 1
Værdierne m og n ændres ikke her.
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;
  }
}
Og her er hvorfor.
Denne kode er analog med koden til venstre
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);
  }
}

"Kun værdierne henholdsvis 5 (m) og 6 (n) er tildelt variabler-enogb;-enogbved intet om (og påvirker ikke på nogen måde) m og n."

"For at sige dig sandheden, så indser jeg nu, at jeg ikke forstod noget. Kan du give mig nogle flere eksempler?"

"Med en objektreference kunne vi have gjort følgende:"

Eksempel 2
Objekternes data ændres i denne kode
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;
  }
}
Og her er hvorfor.
Denne kode er analog med koden til venstre
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;
  }
}

"Referencer til henholdsvis jen og beth er tildelt variablerne a og b; a og b ændrer værdierne inde i objekterne jen og beth."

"Og du kan erklære klasser inde i andre klasser, ikke? Fedt!"

"Men jeg forstår stadig ikke alt andet så godt."

"Alt til sin tid."