"Hej, Amigo, det är jag igen, Ellie. Ursäkta att jag säger det om och om igen, men det är brukligt på jorden under 3000-talet. Jag skulle vilja ge dig mer information om referensvariabler och skicka referensvariabler till funktioner ( metoder)."

"Jag är redo."

"Bra, lyssna då. Referensvariabler är alla icke-primitiva variabler. Sådana variabler innehåller bara en objektreferens (en referens till ett objekt)."

"Primitiva variabler innehåller värden, medan referensvariabler lagrar referenser till objekt eller null. Har jag rätt?"

"Absolut."

"Vad är en referens?"

"Relationen mellan ett objekt och en objektreferens är som förhållandet mellan en person och hennes telefonnummer. Telefonnumret är inte personen, men det kan användas för att ringa personen, be om information, hantera henne eller ge order. En referens används också för att arbeta med objekt. Alla objekt interagerar med varandra med hjälp av referenser."

"Som om de pratade med varandra i telefon?"

"Exakt. När en primitiv variabel tilldelas kopieras värdet. Om en referens tilldelas kopieras bara objektets adress (telefonnumret). Själva objektet kopieras inte. "

"OK jag fick den."

"En referens ger dig ytterligare en fördel: du kan skicka en objektreferens till vilken metod som helst, och den metoden kommer att kunna använda referensen för att modifiera (ändra) objektet genom att anropa dess metoder och komma åt data inuti objektet."

Exempel 1
Värdena m och n ändras inte här.
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;
  }
}
Och här är varför.
Denna kod är analog med koden till vänster
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);
  }
}

"Endast värdena 5 (m) respektive 6 (n), respektive, tilldelas variableraochb;aochbvet ingenting om (och påverkar inte på något sätt) m och n."

"För att säga er sanningen så inser jag nu att jag inte förstod någonting. Kan du ge mig några fler exempel?"

"Med en objektreferens kunde vi ha gjort följande:"

Exempel 2
Objektens data ändras i denna kod
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;
  }
}
Och här är varför.
Denna kod är analog med koden till vänster
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;
  }
}

"Referenser till jen respektive beth är tilldelade variablerna a och b; a och b ändrar värdena inuti objekten jen och beth."

"Och du kan deklarera klasser i andra klasser, eller hur? Coolt!"

"Men jag förstår fortfarande inte allt annat så bra."

"Allt i sinom tid."