1. 程式人生 > >java語言 傳值還是傳地址?

java語言 傳值還是傳地址?

最近見了很多有趣的面試題,但這道題還是讓我想記錄一下。

import java.util.ArrayList;
import java.util.List;

public class ListTest {
	public static void main(String[] args){
		List<String> list = new ArrayList<String>();
		ListTest test = new ListTest();
		test.test1(list);
		System.out.println(list);
	}
	
	public void test1(List<String> list){
		list = null;
	}
}

輸出結果會是什麼?

我的反應是應該會報空指標異常,但又非常不確定,很想上機試一下。

上機最後輸出的結果是[]。

試著增加了幾個方法後,更是一頭霧水。

	public void test2(List<String> list){
		list.add("123");
	}

呼叫test2方法, 輸出的結果是[123]。

最後寫到test4的時候大概有了些頭緒

	public void test4(List<String> list){
		List<String> t1 = new ArrayList<String>();
		t1.add("123");
		list = t1;
	}

呼叫test4方法,輸出結果是[]。

但原理還不是很清楚,上網找了找,發現了篇文章,寫的非常清晰,我就不在這裡複述了,直接上地址。

kailuncen的“Java 函式呼叫是傳值還是傳引用? 從位元組碼角度來看看!