引用類型數據和基本類型數據作為參數傳遞有沒有差別呢缓艳?我們用如下代碼進行說明,并配合圖解讓大家更加清晰
class Demo
{
public static void main(String[] args)
{
int x = 4;
show(x);
System.out.println("x="+x);
}
public static void show(int x)
{
x = 5;
}
}
基本類型作為參數傳遞時例朱,其實就是將基本類型變量x空間中的值復制了一份傳遞給調用的方法show()扭弧,當在show()方法中x接受到了復制的值,再在show()方法中對x變量進行操作闭专,這時只會影響到show中的x奴潘。當show方法執(zhí)行完成,彈棧后喻圃,程序又回到main方法執(zhí)行萤彩,main方法中的x值還是原來的值。
class Demo
{
int x ;
public static void main(String[] args)
{
Demo d = new Demo();
d.x = 5;
show(d);
System.out.println("x="+d.x);
}
public static void show(Demo d)
{
d.x = 6;
}
}
當引用變量作為參數傳遞時斧拍,這時其實是將引用變量空間中的內存地址(引用)復制了一份傳遞給了show方法的d引用變量雀扶。這時會有兩個引用同時指向堆中的同一個對象。當執(zhí)行show方法中的d.x=6時肆汹,會根據d所持有的引用找到堆中的對象愚墓,并將其x屬性的值改為6.show方法彈棧。
由于是兩個引用指向同一個對象昂勉,不管是哪一個引用改變了引用的所指向的對象的中的值浪册,其他引用再次使用都是改變后的值。