包裝類型Integer作爲參數時,爲什麼看起來像值傳遞?

public static void fun(Integer i){
	i=i+2;
}
public static void main(String[] args) {
	Integer p=new Integer(5);
	fun(p);
	
	System.out.println(p);
}

輸出的結果仍然是5,看起來包裝類作爲參數傳遞時,像是值傳遞。

實際上,仍舊是引用傳遞,而每次對Integer的賦值操作,都是創建了一個新的對象,並且給變量賦上新的地址值。

main函數中的p始終指向new Integer(5)這個對象。

而fun函數中,i指向了i+2運算後創建的新對象,此時i和main函數中的p指向了不同的Integer對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章