Anasayfa » Java ve Java Teknolojileri

Java Pass by Value – Pass by Reference ve İstisnalar

3 Kasım 2012 2.381 kez okundu Yorum yok
1 Star2 Stars3 Stars4 Stars5 Stars (Henüz hiç oy kullanılmadı. İlk oyu siz verin.)
Loading ... Loading ...

Merhaba arkadaşlar, bu yazımızda java da bulunan pass by value ve pass by reference yapılarına ve istisnai durumlara örnek teşkil edecek bir uygulama paylaşacağım.

Java da yazılımcıya sunulan pointer ve referans kavramı olmadığı için metodlara gönderilen parametreler bazı durumlara göre pass by value veya pass by reference olabilmektedir. Aslında java da metoda gönderilen parametre o değişkenin değeridir. Bu primitive type lar için değer olurken, objeler için adres olmaktadır. İkisininde gönderdiği değer, o değişkende tutulan değerdir. Birisi gerçek değer iken, diğeri bu değerin adresidir. Bu yüzden metodlara  gönderilen primitive type lar call by value, objeler ise call by reference olarak çağrılır. Ancak bu uygulamayı yazmamdaki amaç Java da karşılaştığım iki istisnadır. String ve Integer type ları nesne tipinde olmasına rağmen metoda gönderilen parametreler call by value gibi çalışmaktaydı. Bundan ise, Java nın bu type ları koruduğu anlamı çıkmaktadır.  Java nın resmi sitesinde ise şu açıklama yapılmış “Strings are constant; their values cannot be changed after they are created. Because String objects are immutable”

Örneğimiz şu şekilde olacak,

/**
 * @author Gürcan Kavakçı
 * 
 */
public class PassBy {
 
	public static void main(String[] args) {
 
		// call by value (normal)
		int firstNum = 4;
		System.out.println("Before 'change' call, Num:" + firstNum);
		change(firstNum);// call by value
		System.out.println("After 'change' call, Num:" + firstNum);
 
		// call by value (not normal)
		String firstString = new String("aaaa");
		System.out.println("Before 'change' call, String:" + firstString);
		change(firstString);
		System.out.println("After 'change' call, String:" + firstString);
 
		// call by value (not normal)
		Integer firstInt = new Integer(8);
		System.out.println("Before 'change' call, Integer:" + firstInt);
		change(firstInt);
		System.out.println("After 'change' call, Integer:" + firstInt);
 
		// call by reference (normal)
		StringBuffer firstBuffer = new StringBuffer("cccc");
		System.out
				.println("Before 'change' call, String Buffer:" + firstBuffer);
		change(firstBuffer);
		System.out.println("After 'change' call, String Buffer:" + firstBuffer);
 
	}
 
	public static void change(int firstNumber) {
		firstNumber = 5;
		System.out.println("While 'change' calling, Num:" + firstNumber);
 
	}
 
	public static void change(String firstString) {
		firstString = firstString.concat("xxxx");
		System.out.println("While 'change' calling, String:" + firstString);
 
	}
 
	public static void change(Integer firstNumber) {
		firstNumber = firstNumber.parseInt("7");
		System.out.println("While 'change' calling, Integer:" + firstNumber);
 
	}
 
	public static void change(StringBuffer firstString) {
		firstString = firstString.append("ddd");
		System.out.println("While 'change' calling, String Buffer:"
				+ firstString);
 
	}
 
}

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.