Java中數(shù)組與棧和堆之間的關(guān)系說明
Java中數(shù)組與棧和堆的關(guān)系
關(guān)于數(shù)組的定義這里就不做敘述,因?yàn)榕cC語言并無不同之處。

數(shù)組的初始化有三種方式:
int[ ] array1 = { 1, 2, 3, 4, 5 };
int[ ] array2 = new int[ ] { 1, 2, 3, 4, 5 };
int[ ] array3 = new int[10 ];第一種和第二種它們兩個(gè)沒有區(qū)別,寫哪個(gè)表示的含義都相同;第三個(gè)則類似C語言中的不完全初始化,只是給定了范圍,里面的數(shù)字編譯器默認(rèn)會(huì)給0。
關(guān)于數(shù)組在內(nèi)存中的存儲(chǔ)、上述的語法以及不同的數(shù)據(jù)類型所代表的默認(rèn)值,如下圖所示:



接下來的圖描述了關(guān)于兩個(gè)引用指向同一個(gè)對(duì)象時(shí)的內(nèi)存棧和堆的分配情況,了解了這些才算是真正理解了數(shù)組。(JVM:Java虛擬機(jī))


接下來我們來認(rèn)識(shí)下null (空引用)。



在前面基本數(shù)據(jù)類型的方法的引用我們說過,基本數(shù)據(jù)類型傳參時(shí)形參不會(huì)影響實(shí)參的值;但是今天要講的引用數(shù)據(jù)類型的形參可以改變實(shí)參的值,先從一道例題來引入這個(gè)內(nèi)容。
問:給定一個(gè)數(shù)組{ 1, 2,3, 4, 5 },將數(shù)組內(nèi)的元素全部擴(kuò)大兩倍,怎么寫?

下面是運(yùn)行時(shí)的編譯器的處理過程:

將其放在棧和堆上的表示方法:

那么問題來了,引用數(shù)據(jù)類型在調(diào)用方法時(shí)的形參一定會(huì)修改實(shí)參的值嗎?
結(jié)論:不一定,看下圖:

總結(jié):一個(gè)引用,不能指向多個(gè)對(duì)象。否則有可能不會(huì)修改實(shí)參值。
遍歷數(shù)組

還有一種遍歷數(shù)組的方式:

這里使用了 Arrays的toString 方法,把傳入的參數(shù)array表示的數(shù)組,以字符串的形式進(jìn)行輸出了

例題:給定數(shù)組{ 1, 2, 3, 4, 5,6 }求數(shù)組中元素的平均值;

接下來是一些編程小技巧
1. 在數(shù)組中使用循環(huán)時(shí),往往循環(huán)的限制條件是數(shù)組長度減一(因?yàn)槭菑?0 下標(biāo)開始) ,所以我們可以直接用 array.length - 1 來表示這個(gè)限制條件(length表示長度),如圖:

2.我們?cè)贑語言時(shí)期知道二分查找是只能對(duì)于一個(gè)有序數(shù)組進(jìn)行查找,那么如果是無序的、亂序的該怎么樣進(jìn)行排序呢,有兩種方法:使用 Arrays.sort(array); 這個(gè)語句進(jìn)行排序 或者 用循環(huán)來弄一個(gè)冒泡排序。(這里只講語句排序)如圖:

3.數(shù)組拷貝、數(shù)組部分拷貝、擴(kuò)大數(shù)組。全部都各自一張圖來表示:

使用 from - to 進(jìn)行擴(kuò)大(不用專門去寫from和to,如果你寫的正確,編譯器會(huì)自動(dòng)識(shí)別上去),取值范圍是( ]; ,例如本圖是(1 ,3]


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot詳解各類請(qǐng)求和響應(yīng)的處理方法
平時(shí)只是在用SpringBoot框架,但并沒有詳細(xì)研究過請(qǐng)求和響應(yīng)執(zhí)行的一個(gè)具體過程,所以本文主要來梳理一下SpringBoot請(qǐng)求和響應(yīng)的處理過程2022-07-07
SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的
這篇文章主要介紹了SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
解決@SpringBootTest 單元測(cè)試遇到的坑
這篇文章主要介紹了解決@SpringBootTest 單元測(cè)試遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
跟我學(xué)Java Swing之游戲設(shè)計(jì)(1)
跟我學(xué)Java Swing之游戲設(shè)計(jì)(1)...2006-12-12
Intellij IDEA命令行執(zhí)行java無法加載主類解決方案
這篇文章主要介紹了Intellij IDEA命令行執(zhí)行java無法加載主類解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法
Ribbon?內(nèi)置了?7?種負(fù)載均衡策略:輪詢策略、權(quán)重策略、隨機(jī)策略、最小連接數(shù)策略、重試策略、可用性敏感策略、區(qū)域性敏感策略,并且用戶可以通過繼承?RoundRibbonRule?來實(shí)現(xiàn)自定義負(fù)載均衡策略,對(duì)Spring?Cloud?Ribbon負(fù)載均衡策略相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03
JAVA中使用openoffice將Excel轉(zhuǎn)PDF再轉(zhuǎn)圖片功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了JAVA中使用openoffice將Excel轉(zhuǎn)PDF再轉(zhuǎn)圖片功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(43)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07

