前言:
歡迎訪問凱哥個人網(wǎng)站:www.kaigejava.com?
歡迎關(guān)注凱哥公眾號:凱哥Java
本文是java基礎(chǔ)語法最后一篇。從下節(jié)課開始,我們將進(jìn)入-【從零學(xué)Java】的第二階段-->面向?qū)ο?/p>
本節(jié)內(nèi)容:
1:java中的值傳遞及圖解
2:地址值傳遞及圖解
3:第一階段(基礎(chǔ)語法)總結(jié)和第二階段預(yù)告
本文出處:《凱哥陪你學(xué)系列之java基礎(chǔ)篇.Java基本語法篇》中第36篇基礎(chǔ)語法完結(jié)篇- java中值傳遞和地址值傳遞And圖解
聲明:本文系凱哥Java(www.kaigejava.com)原創(chuàng)(微信id:kaigejava)。轉(zhuǎn)載請注明出處
一:java中的值傳遞
如下圖:

問題:
①、②、③中分別輸出的是什么?
我們嘗試著看代碼來進(jìn)行分析:
在①中我們知道 輸出的 a=10;b=20
然后調(diào)用了change()這個方法。
所以應(yīng)該先輸出③。
我們來分析 在change()方法中,參數(shù)a=10 ,參數(shù) b=20
所以 a=b,運(yùn)算之后,a的值就為20了。
而 b = a+b。其實(shí)這個時候a=20了 所以b=20+20(b是不變的)
運(yùn)算之后b=40了
所以 ③輸出的應(yīng)該是 a = 20 b=40
然后程序回到main函數(shù)中,接著往下走,就該輸出②了。
那么請問②處輸出多少?是 a=10 b=20 還是 a=20 b=40?
我們先運(yùn)行下,看下輸出結(jié)果:

接下來我們圖解

圖解說明:
1:先壓棧。程序先運(yùn)行main方法,根據(jù)棧的特點(diǎn),main方法被壓倒棧底。
在main方法中,int a =10 ; int b = 20; 所以①出輸出的就是 a=10 b =20
2:接著change()方法進(jìn)棧,然后經(jīng)過運(yùn)行完成之后,在change方法中 int a = 20 ;int b = 40了。所以在③處輸出的a =20 b=4o
3:當(dāng)棧內(nèi)運(yùn)行完成之后,就開始彈棧了。所以-,change方法先被彈棧。(可以理解為子彈已經(jīng)出槍膛了)
4:接著main方法,所以②處輸出的就是 main 方法中的a 和 b的值了。從圖中我們可以看出,a = 10;b=20.所以在②處輸出的是 10和20
二:地址值傳遞及圖解
如下圖:

思考:
①處應(yīng)該輸出的是2
②處(在changeArr方法里面的)輸出的是多少?
③處輸出的是多少?
分析:
因?yàn)?arr[i]%2==0 這句代碼意思就是:arr中第i個元素如果模 2 == 0
才會執(zhí)行arr[i]*=2這句代碼的意思就是:arr[i]= arr[i]*2;
至于 模運(yùn)算(%)是什么和arr[i]*=2是什么,可以回顧下之前文章。
所以②處輸出的是4.
那么③應(yīng)該是什么?
請看運(yùn)行結(jié)果:

內(nèi)存圖解;

圖解說明:
1:同樣main函數(shù)先被壓棧 到棧底
2:在堆區(qū)創(chuàng)建了arr數(shù)組并初始化了分別為1,2,3,4,5 所以在①輸出arr第二個元素就是2
3:接著changeArr方法進(jìn)棧
4:同樣 將數(shù)組 arr的地址指想了changeArr方法,
5:經(jīng)過changeArr方法運(yùn)算之后,數(shù)組第二個元素就變成4 ,第四個元素變成8。所以在②打印出的是4
6:程序運(yùn)行完成changeArr被彈棧(子彈出膛)。也就是引用arr數(shù)組的地址值被切斷了。如圖中被劃斷的
7:接著運(yùn)行main方法,此時main方法中arr的地址值依然指向的是 0x0011這個。我們從堆區(qū)中可以看到,在堆區(qū)中的arr={1,4,3,8,5}
所以在③打印出arr中第二個元素就是4
三:總結(jié)
通過本節(jié)學(xué)習(xí),我們需要掌握
1:Java中值傳遞和址傳遞的區(qū)別
值傳遞,值是多少,就是多少。
址傳遞,有可能會變化的。如果其他方法引用這個地址值之后,進(jìn)行處理,那么就會影響最終結(jié)果。
下節(jié)預(yù)告:
下節(jié)開始我們將做個小項(xiàng)目:簡單的《學(xué)生管理系統(tǒng)》,通過這個小項(xiàng)目,可以把之前學(xué)過的串聯(lián)起來,一起回顧java基礎(chǔ)語法。歡迎學(xué)習(xí)下一篇:《從零學(xué)java筆錄-第37篇基礎(chǔ)語法完結(jié)小項(xiàng)目練習(xí)-學(xué)生管理系統(tǒng) 基礎(chǔ)版》