Merhaba.İlk önce aşağıdaki koda bakalım:

  char value;

public static void main(String[] args) {
    new A().deyishWrapper(); 
}

public void deyishWrapper(){
    deyish(value);
    System.out.println(value);

}

public void deyish(char c){
    c = 'f';
}

Burada deyish methodunda c değişenine 'f'-in atanmasının qlobal value değişenine hiç bir tesiri yok.Yani çıltı f değil boş '' oluyor.

Şimdi aşağıdaki koda bakalım

char[] value={'a','b'};

public static void main(String[] args) {
    new A().deyishWrapper(); 
}

public void deyishWrapper(){
    deyish(value);
    System.out.println(value[0]);

}

public void deyish(char[] s){
    s[0] = 'f';
}

Burada ise çıktı olarak f alıyorum.Yani qlobal value arrayinin 0-cı indexinin değeri f oldu.

Ayni şekilde char yerine İnteger[],int[] kullandım yine qlobal arrayin 0-ci indexini değişti. Ancak array olduğu zaman qlobal değişeni değişiyor.

Nasıl oluyor hangi aşamalardan dolayı böyle oluyor?

Teşekkürler

soruldu: 14 Mar '15, 10:59

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%


Merhaba, java methodlara değişkenleri gönderirken pass-by-value methodunu uygular. Yani gönderdiğin değişkenin değeri kopyalanarak gönderilir. Bu bakımdan

char value;

şeklindeki bir tanımlamada value değişkeni bir primitive değişken olduğu için, alt method çağrılırken(sizin örneğinizde deyish) bu değişkenin değeri kopyalanır. Alt methoddaki değişikliklerden ise üst methodun haberi olmaz. Bu bakımdan birinci durumda boş oluyor. Diğer durumda

char[] value={'a','b'}

tanımlanan char[] ise bir nesne dir. Alt methoda geçerken bu sefer nesnenin referansının değeri taşınır. Alt methodda bu referansa bağlı olan nesne üzerinde yaptığın değişiklikler üst methoda da yansımış olur.

Buradaki temel fark aslında, birinci durumda bir primitive tipten ikinci durumda ise bir nesneden söz ediyor olmamız.

permanent link

cevaplandı: 14 Mar '15, 17:37

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

değiştirildi: 15 Mar '15, 14:32

Çok güzel bir açıklama olmuş teşekkürler.

(15 Mar '15, 08:30) ercet00ilk ercet00ilk's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×6

Soruldu: 14 Mar '15, 10:59

Görüntüleme: 260 kez

Son güncelleme: 15 Mar '15, 14:32

powered by BitNami OSQA