更新時間:2023-02-07 16:14:34 來源:動力節點 瀏覽2237次
在Java中參數的傳遞主要有兩種:值傳遞和參數傳遞;
下面是對兩種傳遞方式在內存上的分析:
一:值傳遞
解釋:實參傳遞給形參的是值 形參和實參在內存上是兩個獨立的變量 對形參做任何修改不會影響實參
代碼示例如下:
package arrayDemo;
public class Demo1 {
public static void main(String[] args) {
int b =20;
change(b);// 實參 實際上的參數
System.out.println(b);
}
public static void change(int a){//形參 形式上的參數
a=100;
}
}
結果:20
為什么?看下面分析:
通俗的講法就是:形參只是實參創建的一個副本,副本改變了,原本當然不可能跟著改變;
再通俗的講法就是:
小明去餐廳吃飯,看見別人點的紅燒肉挺好吃,九把服務員叫過來,說我要一份紅燒肉,服務員從后廚拿來一份紅燒肉,小明吃完了,但是他吃的紅燒肉跟旁邊那個人吃的是一份嗎?當然不是。
再來解釋引用傳遞
二:引用傳遞
實參傳遞給形參的是參數對于 堆內存上的引用地址 實參和 形參在內存上指向 了同一塊區域 對形參的修改會影響實參
package arrayDemo;
public class Demo1 {
public static void main(String[] args) {
int [] a={1,2,3};
System.out.println(a[0]);
change(a);
System.out.println(a[0]);
}
public static void change(int[] a ){
a[0]=100;
}
}
結果:1 100
為什么?
由于引用傳遞,傳遞的是地址,方法改變的都是同一個地址中的值,
原來a[0]指向0x13地址,值是1,
后來在a[0] 指向的也是0x13地址,將值變成了100
所以,再查詢a[0]的值的時候,值自然變成了100
通俗點的講法就是:
小明回到家,他妻子說:冰箱二層有一只雞,你去做了;
小明做好了,叫妻子過來吃飯。
這個時候,他妻子現在看見的雞和她買回來的一樣嗎?
當然不一樣,都做熟了;
什么意思呢?
雞就是數據
冰箱二層就是存儲數據的地址
把雞做熟了就是相當于把值改變了
地方還是那個地方,就是雞變了。
以上就是動力節點小編介紹的"什么是值傳遞和引用傳遞?區別在哪兒",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習