從零學(xué)java筆錄-第36篇基礎(chǔ)語法完結(jié)篇- java中值傳遞和地址值傳遞And圖解

前言:

歡迎訪問凱哥個人網(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ǔ)版》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,710評論 4 12
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù),而在處理數(shù)...
    Java幫幫閱讀 1,681評論 0 9
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,044評論 0 2
  • 本節(jié)主要內(nèi)容: 1:一維數(shù)組在動態(tài)賦值在內(nèi)存中圖解。 2:本節(jié)總結(jié)&下節(jié)預(yù)告 本文出處:《凱哥陪你學(xué)系列之java...
    凱哥Java閱讀 319評論 0 1
  • 05.01_Java語言基礎(chǔ)(數(shù)組概述和定義格式說明)(了解) A:為什么要有數(shù)組(容器)為了存儲同種數(shù)據(jù)類型的多...
    NgNono閱讀 166評論 0 0

友情鏈接更多精彩內(nèi)容