"Hei, Amigo, det er meg igjen, Ellie. Beklager at jeg sier det om og om igjen, men det er vanlig på jorden i det 31. århundre. Jeg vil gjerne gi deg flere detaljer om referansevariabler og overføring av referansevariabler til funksjoner ( metoder)."

"Jeg er klar."

"Flott, så hør. Referansevariabler er alle ikke-primitive variabler. Slike variabler inneholder bare en objektreferanse (en referanse til et objekt)."

"Primitive variabler inneholder verdier, mens referansevariabler lagrer referanser til objekter eller null. Har jeg rett?"

"Absolutt."

"Hva er en referanse?"

"Forholdet mellom et objekt og en objektreferanse er som forholdet mellom en person og telefonnummeret hennes. Telefonnummeret er ikke personen, men det kan brukes til å ringe personen, be om informasjon, administrere henne eller gi ordre. En referanse brukes også til å arbeide med objekter. Alle objekter samhandler med hverandre ved hjelp av referanser."

"Som om de snakket med hverandre over telefonen?"

"Nøyaktig. Når en primitiv variabel tildeles, kopieres verdien. Hvis en referanse tildeles, kopieres bare adressen til objektet (telefonnummeret). Selve objektet kopieres ikke. "

"Ok jeg forstår."

"En referanse gir deg en fordel til: du kan sende en objektreferanse til en hvilken som helst metode, og den metoden vil kunne bruke referansen til å endre (endre) objektet ved å kalle dets metoder og få tilgang til data inne i objektet."

Eksempel 1
Verdiene m og n endres 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 koden 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);
  }
}

"Bare verdiene henholdsvis 5 (m) og 6 (n) er tilordnet variablerenogb;enogbvet ingenting om (og ikke påvirker på noen måte) m og n."

"For å si deg sannheten, innser jeg nå at jeg ikke skjønte noe. Kan du gi meg noen flere eksempler?"

"Med en objektreferanse kunne vi ha gjort følgende:"

Eksempel 2
Objektenes data endres i denne koden
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 koden 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;
  }
}

"Referanser til henholdsvis jen og beth er tilordnet variablene a og b; a og b endrer verdiene inne i objektene jen og beth."

"Og du kan erklære klasser inne i andre klasser, ikke sant? Kult!"

— Men jeg forstår fortsatt ikke alt annet så godt.

"Alt til rett tid."