CodeBlanks Logo Icon CodeBlanks

Nesne parametresi

Nesne referansı geçmeyi öğrenirsin.

Nesne parametreleri

Bir nesneyi (örneğin ArrayList veya dizi) metoda geçtiğinde, aslında nesnenin referansının kopyası geçer. Yani metot, aynı nesneye erişir.

static void addOne(ArrayList<Integer> list) {
  list.add(1);
}
ArrayList<Integer> xs = new ArrayList<>();
addOne(xs);
// xs: [1]

Metot içinde list.add(1) yapınca, dışarıdaki xs de değişir. Çünkü ikisi aynı nesneyi gösterir. Yeni bir liste atarsan (list = new ArrayList<>()) dışarıyı etkilemez.

Referans atama dışarıyı etkilemez

Metot içinde parametreyi yeni bir nesneye atarsan, dışarıdaki nesne değişmez. Sadece metodun kendi referansı yeni nesneyi göstermeye başlar.

static void reset(ArrayList<Integer> list) {
  list = new ArrayList<>();  // dışarıyı etkilemez
}
ArrayList<Integer> xs = new ArrayList<>();
xs.add(9);
reset(xs);
// xs hâlâ [9]

Yani nesnenin içeriğini değiştirmek dışarıyı etkiler; referansı yeniden atamak etkilemez.

Uygulama Listeye değer ekle

addItem adında static void metot tanımla; parametre ArrayList<Integer> list, int value. Gövde, list.add(value) yapsın. main içinde bir liste oluştur, addItem(liste, 7) çağır ve listeyi yazdır.

Başlangıç kodu

Main.java
import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>();
    // addItem metodunu 7 değeriyle çağır
    // Listeyi yazdır
  }
  // addItem metodunu buraya tanımla
}

Örnek çözüm

Main.java
static void addItem(ArrayList<Integer> list, int value) {
  list.add(value);
}
// main içinde:
addItem(list, 7);
System.out.println(list);

Beklenen çıktı

[7]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boşluğu doldur: listeye eleman ekle

Soru
static void addOne(ArrayList<Integer> list) {
  list.____(1);
}
Cevap
static void addOne(ArrayList<Integer> list) {
  list.add(1);
}

Açıklama: list.add(1) hem metotta hem dışarıda listeyi değiştirir.

2 Senaryo ve sonuç eşleştir

Kavram Anlamı
list.add(1) Dışarıdaki liste değişir
list = new ArrayList<>() Dışarıdaki liste aynı kalır
list.clear() Dışarıdaki liste boşalır
int n = 5; zero(n); n değişmez

3 Bir ArrayList'i metoda geçirip metot içinde list.add(...) yaparsan ne olur?

  • Dışarıdaki liste değişir
  • Derleme hatası verir
  • Dışarıdaki liste değişmez Doğru cevap
  • Yeni bir kopya oluşur

Açıklama: Referans kopyası aynı nesneyi gösterir; add dışarıyı değiştirir.

Başlangıç bölümündeki tüm dersler