java語言 傳值還是傳地址?
阿新 • • 發佈:2019-01-30
最近見了很多有趣的面試題,但這道題還是讓我想記錄一下。
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 函式呼叫是傳值還是傳引用? 從位元組碼角度來看看!”