1. 程式人生 > >java 值傳遞及地址傳遞(引用傳遞)

java 值傳遞及地址傳遞(引用傳遞)

        一直來覺得對值傳遞和地址傳遞了解的很清楚,剛才在開源中國上看到一篇帖子介紹了java中的值傳遞和地址傳遞,看完後感受頗深。下邊總結下以便更容易理解。

        按照以前的理解,java中基本資料型別是值傳遞,物件是地址(引用)傳遞。給大家看個例子:

public class ObjectTrans {

	public static void main(String[] args) {
		String name = "123";
		SChange(name);
		System.out.println(name);
	}
	
	public static void SChange (String str) {   
		str = "234";
    } 

}

大家思考下,這個例子輸出的結果應該是123呢還是234呢?結果是123。why?一句話表達:物件也是值傳遞,只是把這個物件的引用copy了一份。

        其實java本來就是值傳遞,沒有c++那樣的指標傳遞,分步分析下上邊的程式碼:

1、name = "123"

2、呼叫SChange  str 和 name 共同指向 “123”(拷貝name的引用賦給str)

3、str 重新賦值並指向“234”

4、name指向不變還是“123”

        下邊看另外一段程式碼:

public class ObjectTrans {

	public static void main(String[] args) {
		StringBuilder name = new StringBuilder("123");
		SChange(name);
		System.out.println(name);
	}
	
	public static void SChange (StringBuilder str) {   
		//str = "234";
		str.append("234");
    } 

}

那麼這段程式碼輸出的結果應該是什麼呢?答案是123234,why?同樣分步分析:

1、name = "123"

2、呼叫SChange  str 和 name 共同指向 “123”(拷貝name的引用賦給str)

3、改變所指向物件的值"123"+"234"

4、引用沒變只是值變了,所以結果為123234

如果不明白請留言,自己好好分析下。。。請記住一句話:java只有值傳遞。