Java由淺入深細數(shù)數(shù)組的操作上
本篇介紹一維數(shù)組以及相關(guān)操作,二維數(shù)組放在下一篇
1.JVM的內(nèi)存分布
Java的代碼是運行在JVM上的,為了方便管理,對所使用的內(nèi)存按照功能的不同進行了劃分,這不是本篇重點,只做簡單的介紹:
Java虛擬棧:局部變量在這里開辟空間
Java本地方法棧:運行一些由C/C++編寫的程序
堆:對象在這里存儲,且開辟后的空間使用完畢后Java會自動收回,不需要我們再寫free
程序計數(shù)器:存儲指令
方法區(qū):存儲靜態(tài)變量、類、常量等
之前的int、double等都是在Java棧中開辟空間,而數(shù)組則是在堆上開辟的空間
2.引用類型變量的特點
引用類型變量并不會直接存儲對象本身,它所存儲的是對象本身在堆中的首地址,通過地址來操作對象,假設(shè)有一個數(shù)組arr,數(shù)組中有1~5共5個元素,數(shù)組起始地址是0x0001,那么這個數(shù)組在JVM中的存儲情況如下:
基本類型的數(shù)據(jù)空間中保存的都是初始化的值,這也是二者之間的區(qū)別
3.一維數(shù)組的使用
3.1定義和初始化
一維數(shù)組的定義和初始化如下:
int [] arr1 = {1,2,3,4,5}; int [] arr2 = new int [] {1,2,3,4,5}; int [] arr3 = new int [5]; //數(shù)組元素的值默認為0
同Java中的int等變量一樣,數(shù)組也必須進行初始化,若數(shù)組初始化不知道給多大空間,元素給什么值,那么可以先賦值null
null在Java中表示空引用,int [] arr=null 就說明arr引用的是一個空對象,這個要和C語言中的NULL區(qū)分開來
3.2數(shù)組的訪問
依舊是通過下標來對數(shù)組進行訪問,下標還是從0開始,有一點和C語言不同
假設(shè)數(shù)組有10個元素,我們打印第11個元素,C語言中會打印隨機值,但在Java中則是直接報錯
3.3打印數(shù)組所有的元素
在打印之前有一個問題需要解決:如何確定數(shù)組的長度
Java中沒有給類似C語言中的sizeof的操作符,而是采用“數(shù)組名.length”來求數(shù)組長度,如下圖:
現(xiàn)在來看看我們有多少種打印數(shù)組所有元素的方式:
- 循環(huán)語句:這個就不展開講了,過于簡單
- foreach
具體結(jié)構(gòu)如下:
冒號左邊寫打印的元素的數(shù)據(jù)類型,右邊寫數(shù)組名
Array.toString
這個是將數(shù)組的內(nèi)容轉(zhuǎn)換成字符串,這樣就可以按照打印字符串的方式來打印,使用前要引用包(類似C語言中的引用頭文件)
引用方法:
import java.util.Arrays
3.4數(shù)組的拷貝
- 循環(huán)語句:依舊跳過
- Arrays.copyOf()
此方法返回值是數(shù)組,有兩個參數(shù),分別是拷貝的目標和拷貝的數(shù)組的長度
- System.arraycopy()
此方法有5個參數(shù),從左至右依次是:源數(shù)組、源數(shù)組的起始位置、目標數(shù)組、目標數(shù)組的起始位置、拷貝的元素個數(shù)
- 數(shù)組名.clone()
3.5作為參數(shù)和返回值
Java中的數(shù)組可以作為返回值,這沒有什么需要注意的地方
數(shù)組作為參數(shù),因為變量存放的是地址,所以在實參傳參的時候?qū)嶋H上是將地址傳遞過去, 形參接收的也是地址,形參通過地址可以對堆上的數(shù)組進行操作
一維數(shù)組內(nèi)容結(jié)束,完
到此這篇關(guān)于Java由淺入深細數(shù)數(shù)組的操作的文章就介紹到這了,更多相關(guān)Java數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring在多線程下保持事務(wù)的一致性的方法實現(xiàn)
當Spring在多線程環(huán)境下運行時,確保事務(wù)一致性是非常重要的,本文主要介紹了Spring在多線程下保持事務(wù)的一致性的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01在CentOS系統(tǒng)上安裝Java的openjdk的方法
這篇文章主要介紹了在CentOS系統(tǒng)上安裝Java的openjdk的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下2015-06-06Selenium+Tesseract-OCR智能識別驗證碼爬取網(wǎng)頁數(shù)據(jù)的實例
本文主要介紹了Selenium+Tesseract-OCR智能識別驗證碼爬取網(wǎng)頁數(shù)據(jù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Java實現(xiàn)Map遍歷key-value的四種方法
本文主要介紹了Java實現(xiàn)Map遍歷key-value的四種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07SpringBoot Event 事件如何實現(xiàn)異步延遲執(zhí)行
這篇文章主要介紹了Spring Boot Event 事件如何實現(xiàn)異步延遲執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02