Java中值傳遞和引用傳遞的區別

在Java中參數的傳遞主要有兩種:值傳遞和參數傳遞;spa

下面是對兩種傳遞方式在內存上的分析:code

一:值傳遞blog

解釋:實參傳遞給形參的是值  形參和實參在內存上是兩個獨立的變量 對形參作任何修改不會影響實參內存

代碼示例以下:class

 

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變量

爲何?看下面分析:引用

 

通俗的講法就是:形參只是實參建立的一個副本,副本改變了,本來固然不可能跟着改變;方法

再通俗的講法就是:im

小明去餐廳吃飯,看見別人點的紅燒肉挺好吃,九把服務員叫過來,說我要一份紅燒肉,服務員從後廚拿來一份紅燒肉,小明吃完了,可是他吃的紅燒肉跟旁邊那我的吃的是一份嗎?固然不是。數據

再來解釋引用傳遞

二:引用傳遞

實參傳遞給形參的是參數對於 堆內存上的引用地址 實參和 形參在內存上指向 了同一塊區域  對形參的修改會影響實參

 

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

通俗點的講法就是:

小明回到家,他妻子說:冰箱二層有一隻雞,你去作了;

小明作好了,叫妻子過來吃飯。

這個時候,他妻子如今看見的雞和她買回來的同樣嗎?

固然不同,都作熟了;

什麼意思呢?

雞就是數據

冰箱二層就是存儲數據的地址

把雞作熟了就是至關於把值改變了

地方仍是那個地方,就是雞變了。

相關文章
相關標籤/搜索