Bölüm 4 - Objects and Classes 6
Biz terim olarak call by value ve call by reference görürüz bilgisayar bilimlerinde. Call by value'de methodu çağıran yerin verdiği değeri sadece alır. Call by reference de methodu çağıran bu sefer de değeri değil, referansını alır. Böylece bir method bir değişkenin referansı ile verildiğinde değişken içerisinde depolanan değeri de değiştirebilir.
Java programlama dili her zaman call by value'yi kullanır.
double percent = 10;
minterCoder.raiseSalary(percent);
Örneğin şunu yapalım
public static void tripleValue(double x) {
x = 3*x;
}
double percent = 10;
tripleValue(percent);
Burda olan olay şudur:
- x değeri percent'ın bir kopyası olan 10 değeri ile initialize edilir.1
- x değeri 3'e katlanır artık değeri 30 olur.
- Method block sonuna gelir ve x artık kullanılamaz olur.
Ama percent değeri hala 10'dur çünkü biz parametreye dediğimiz gibi referans geçmedik çünkü Java'da sadece call by value vardır ve percent'ın değeri tek x'e atanır referansı değil bu yüzden percent değeri 10 olarak kalmıştır.

Java'da 2 tür method parametresi vardır.
- Primitive types (numbers,boolean values)
- Object references
Görüldüğü üzere biz primitive type olan double'ı kullandık ve hiçbir şekilde bir şeyi değiştiremedik percent'la ilgili ama object parametrelerinde durum biraz farklıdır şöyle bakalım.
public static void tripleSalary(Employee x){
x.raiseSalary(200);
}
minterCoder = new Employee(...);
tripleSalary(minterCoder);
dersek:
- x değeri minterCoder'in bir kopyası ile başlatılır ki bu bir object referencesidir.
- raiseSalary methodu object reference'lerine uygulanır ve x ve minterCoder salary değerleri %200 artırılır.
- Method biter ve parametre olan x değeri artık kullanılamaz olur.Tabi minterCoder object variable'si bu referansı kullanıdığı için yine aynı şekilde %200 artmış olan salary değişkenini de kullanmaya devam eder.

Çoğu yerde görürsünüz ki Java call by reference'yi kullanır object'ler için halbuki bu yanlıştır ve çoğu kişi için gerçekten yanlış anlaşılmaya ve yanlış bilgi vermeye sebebiyet vermiştri şimdi bunun biraz derinine inelim...
public static void swap(Employee x, Employee y){
Employee temp = x;
x = y;
y = temp;
}
Eğer ki Java call by referance'yi kullanacak olusra o zaman bu methodun çalışması gereklidir:
var a = new Employee("Minter",...);
var b = new Employee("James",...);
swap(a,b);
Ancak gel gör ki bu method object referansları olan a ve b'yi değiştirmiyor. Swap methodu da x ve y parametreleri olan bunlar bunlara verilen (a,b)'nin referanslarının kopyasıyla initialize edilirler.

Bu da gösteriyor ki Java programlama dili call by referance özelliğini kullanmıyor bunun yerine object referansları called by value ile gidiyor.