javanın pass by referance olduğunu sınamak için şöyle bir kod yazdım ancak çalışmadı nedense.Yardımcı olabilir misiniz hocam?

public class referance {
String str;

}

public class Deneme {

public static void main(String args[]) {

    referance ref1=new referance(),ref2=new referance();
    ref1.str="aaa";
    ref2.str="bbb";
    System.out.println(ref1+" "+ ref2);
    fonk1(ref1,ref2);
    System.out.println(ref1+" "+ ref2);

    }

    private static void fonk2(referance ref1,referance ref2);{
        referance degis=new referance();
        degis=ref1;
        degis.str+="-aaa nin devami";
        degis=ref2;
        degis.str+="-bbb nin devami";

    }
    private static void fonk1(referance r1,referance r2){
        fonk2(r1,r2);
    }
 }

soruldu: 05 Şub '15, 11:14

mow's gravatar image

mow
0557
cevap kabul oranı: 0%

değiştirildi: 07 Şub '15, 03:09

Turgay%20Can's gravatar image

Turgay Can
8.3k63798


Yazım hataları ve bazı mantıksal hataların var. Doğru kod aşağıdaki gibidir.

class Referance {

public String str;
}

public class Deneme {

public static void main(String args[]) {

    Referance ref1 = new Referance();
    Referance ref2 = new Referance();
    ref1.str = "aaa";
    ref2.str = "bbb";
    System.out.println(ref1.str + " " + ref2.str);
    fonk1(ref1, ref2);
    System.out.println(ref1.str + " " + ref2.str);

}

private static void fonk2(Referance ref1, Referance ref2) {
    Referance degis = new Referance();
    degis = ref1;
    degis.str += "-aaa nin devami";
    degis = ref2;
    degis.str += "-bbb nin devami";

}

private static void fonk1(Referance r1, Referance r2) {
    fonk2(r1, r2);
}
}
permanent link

cevaplandı: 05 Şub '15, 11:34

emrecan-oztas's gravatar image

emrecan-oztas
4.1k62146
cevap kabul oranı: 23%

değiştirildi: 05 Şub '15, 11:35

teşekkürler hocam ya. compiler böyle şeyleri bildirmediği için bakınıp durdum ama görememiştim bi türlü :) sağolun

(05 Şub '15, 12:43) mow mow's gravatar image

rica ederim ;) iyi çalışmalar..

(05 Şub '15, 17:14) emrecan-oztas emrecan-oztas's gravatar image

Yalnız şunu açıklığa kavuşturmak gerek, Java'nın evaluation stratejisi her zaman pass-by-value'dur. Sorunuzu okuyanlar Java'nın pass-by-referance olduğunu çıkarımında bulunabilir ki bu yanlış olur.

permanent link

cevaplandı: 05 Şub '15, 23:37

thekhug's gravatar image

thekhug
26
cevap kabul oranı: 0%

evet,haklısınız. nesnelerin aslında birer pointer gibi çalıştığını söylemek daha doğru olur, değil mi?

(06 Şub '15, 02:43) mow mow's gravatar image
1

Oluşturduğun objeleri değişkene atadığında obje ile değişken ismi arasında bir referans oluşturmuş olursun. Yani: MyClass x = new MyClass(); burada x, MyClass tipinde bir objeye referanstır. Referans, pointer gibi fakat bazı farkları olan bir yapı.

Aklına şu takılabilir: madem bu dilde referans var ve methodlara referans gönderebiliyoruz, neden bu dil pass-by-ref değil? Çünkü gönderilen şey aslında referanslar'ın "değeri" (objenin heapteki adresi gönderiliyor). Evaluation strategy olan pass-by-referance ile data type olan referance'ı birbirine karıştırmamak gerekir.

(06 Şub '15, 10:26) thekhug thekhug'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:

×1

Soruldu: 05 Şub '15, 11:14

Görüntüleme: 433 kez

Son güncelleme: 07 Şub '15, 03:09

Benzer sorular

powered by BitNami OSQA