24 Mayıs 2006

Java passByReference

Java ile haşır neşir olan insanlar java da objelerin methodlara parametre olarak gönderilirken value olarak değil de referans olarak geçtiğini bilirler.(Türkçe söyleyince biraz garip geldi ama passByValue değil de passByReference yani)
Basit değil mi peki aşağıdaki code ne print edecek.
class Person(){
int personId;
}
class Foo{
main(){
Person p=new Person();
p.personId=3;
System.out.println(p.personId);
doSomething(p);
System.out.println(p.personId);
}

public void doSomething(Person p){
p=new Person();
p.personId=5;
}
}

önce 3 sonra 5 değil mi çünkü referansını göndermiştik eleman da değiştirdi.Maalesef hayır önce de 3 sonra da 3. Neden mi çok basit methodlara objeleri parametre olarak gönderdiğimizde objenin referansının kendisini değil kopyasını göndeririz.

1 yorum:

Adsız dedi ki...

new Person diyince yeni bir alanda person objesi oluşur. Method biterken kopya ref ile ref birbirini tutmadığından gerçek ref değeri değiştirilmez.

Eğer new person denmeseydi ikincisi 5 yazacaktı