"Merhaba Amigo, yine ben Ellie. Bunu tekrar tekrar söylediğim için kusura bakma ama bu 31. yüzyılda Dünya'da adettendir. Size referans değişkenleri ve referans değişkenlerini fonksiyonlara geçirme hakkında daha fazla ayrıntı vermek istiyorum ( yöntemler)."

"Ben hazırım."

"Harika, o zaman dinle. Referans değişkenler, ilkel olmayan değişkenlerdir. Bu tür değişkenler yalnızca bir nesne referansı (bir nesneye referans) içerir."

"İlkel değişkenler değerler içerirken, referans değişkenler nesnelere veya null'a yapılan referansları saklar. Haklı mıyım?"

"Kesinlikle."

"Referans nedir?"

"Bir nesne ile nesne referansı arasındaki ilişki, bir kişi ile telefon numarası arasındaki ilişkiye benzer. Telefon numarası kişi değildir, ancak kişiyi aramak, bilgi istemek, onu yönetmek veya yönetmek için kullanılabilir. emir verir. Bir referans, nesnelerle çalışmak için de kullanılır. Tüm nesneler, referansları kullanarak birbirleriyle etkileşime girer."

"Sanki birbirleriyle telefonda konuşuyorlarmış gibi?"

"Kesinlikle. İlkel bir değişken atandığında değer kopyalanır. Bir referans atanırsa, yalnızca nesnenin adresi (telefon numarası) kopyalanır. Nesnenin kendisi kopyalanmaz. "

"Tamam anladım."

"Bir referans size bir fayda daha sağlar: herhangi bir yönteme bir nesne referansı iletebilirsiniz ve bu yöntem, yöntemlerini çağırarak ve nesnenin içindeki verilere erişerek nesneyi değiştirmek (değiştirmek) için referansı kullanabilir."

Örnek 1
m ve n değerleri burada değişmez.
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;
  }
}
Ve işte nedeni.
Bu kod soldaki koda benzer
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);
  }
}

"Değişkenlere yalnızca sırasıyla 5 (m) ve 6 (n) değerleri atanırAVeB;AVeBm ve n hakkında hiçbir şey bilmiyorum (ve hiçbir şekilde etkilemeyin).

"Doğruyu söylemek gerekirse, şimdi hiçbir şey anlamadığımı fark ettim. Bana birkaç örnek daha verebilir misiniz?"

"Bir nesne referansı ile aşağıdakileri yapabilirdik:"

Örnek 2
Nesnelerin verileri bu kodda değişir
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;
  }
}
Ve işte nedeni.
Bu kod soldaki koda benzer
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;
  }
}

"Sırasıyla jen ve beth referansları, a ve b değişkenlerine atanır; a ve b, jen ve beth nesnelerinin içindeki değerleri değiştirir."

"Ve diğer sınıfların içindeki sınıfları ilan edebilirsiniz, değil mi? Harika!"

"Ama hala diğer her şeyi çok iyi anlamıyorum."

"Hepsi zamanında."