Java由淺入深細(xì)數(shù)數(shù)組的操作上
本篇介紹一維數(shù)組以及相關(guān)操作,二維數(shù)組放在下一篇
1.JVM的內(nèi)存分布
Java的代碼是運(yùn)行在JVM上的,為了方便管理,對(duì)所使用的內(nèi)存按照功能的不同進(jìn)行了劃分,這不是本篇重點(diǎn),只做簡(jiǎn)單的介紹:
Java虛擬棧:局部變量在這里開辟空間
Java本地方法棧:運(yùn)行一些由C/C++編寫的程序
堆:對(duì)象在這里存儲(chǔ),且開辟后的空間使用完畢后Java會(huì)自動(dòng)收回,不需要我們?cè)賹慺ree
程序計(jì)數(shù)器:存儲(chǔ)指令
方法區(qū):存儲(chǔ)靜態(tài)變量、類、常量等
之前的int、double等都是在Java棧中開辟空間,而數(shù)組則是在堆上開辟的空間
2.引用類型變量的特點(diǎn)
引用類型變量并不會(huì)直接存儲(chǔ)對(duì)象本身,它所存儲(chǔ)的是對(duì)象本身在堆中的首地址,通過地址來操作對(duì)象,假設(shè)有一個(gè)數(shù)組arr,數(shù)組中有1~5共5個(gè)元素,數(shù)組起始地址是0x0001,那么這個(gè)數(shù)組在JVM中的存儲(chǔ)情況如下:

基本類型的數(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ù)組元素的值默認(rèn)為0同Java中的int等變量一樣,數(shù)組也必須進(jìn)行初始化,若數(shù)組初始化不知道給多大空間,元素給什么值,那么可以先賦值null
null在Java中表示空引用,int [] arr=null 就說明arr引用的是一個(gè)空對(duì)象,這個(gè)要和C語言中的NULL區(qū)分開來
3.2數(shù)組的訪問
依舊是通過下標(biāo)來對(duì)數(shù)組進(jìn)行訪問,下標(biāo)還是從0開始,有一點(diǎn)和C語言不同
假設(shè)數(shù)組有10個(gè)元素,我們打印第11個(gè)元素,C語言中會(huì)打印隨機(jī)值,但在Java中則是直接報(bào)錯(cuò)

3.3打印數(shù)組所有的元素
在打印之前有一個(gè)問題需要解決:如何確定數(shù)組的長(zhǎng)度
Java中沒有給類似C語言中的sizeof的操作符,而是采用“數(shù)組名.length”來求數(shù)組長(zhǎng)度,如下圖:

現(xiàn)在來看看我們有多少種打印數(shù)組所有元素的方式:
- 循環(huán)語句:這個(gè)就不展開講了,過于簡(jiǎn)單
- foreach
具體結(jié)構(gòu)如下:

冒號(hào)左邊寫打印的元素的數(shù)據(jù)類型,右邊寫數(shù)組名

Array.toString
這個(gè)是將數(shù)組的內(nèi)容轉(zhuǎn)換成字符串,這樣就可以按照打印字符串的方式來打印,使用前要引用包(類似C語言中的引用頭文件)
引用方法:
import java.util.Arrays

3.4數(shù)組的拷貝
- 循環(huán)語句:依舊跳過
- Arrays.copyOf()
此方法返回值是數(shù)組,有兩個(gè)參數(shù),分別是拷貝的目標(biāo)和拷貝的數(shù)組的長(zhǎng)度

- System.arraycopy()
此方法有5個(gè)參數(shù),從左至右依次是:源數(shù)組、源數(shù)組的起始位置、目標(biāo)數(shù)組、目標(biāo)數(shù)組的起始位置、拷貝的元素個(gè)數(shù)

- 數(shù)組名.clone()

3.5作為參數(shù)和返回值
Java中的數(shù)組可以作為返回值,這沒有什么需要注意的地方
數(shù)組作為參數(shù),因?yàn)樽兞看娣诺氖堑刂?,所以在?shí)參傳參的時(shí)候?qū)嶋H上是將地址傳遞過去, 形參接收的也是地址,形參通過地址可以對(duì)堆上的數(shù)組進(jìn)行操作
一維數(shù)組內(nèi)容結(jié)束,完
到此這篇關(guān)于Java由淺入深細(xì)數(shù)數(shù)組的操作的文章就介紹到這了,更多相關(guān)Java數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot手動(dòng)開啟事務(wù):DataSourceTransactionManager問題
這篇文章主要介紹了SpringBoot手動(dòng)開啟事務(wù):DataSourceTransactionManager問題,具有很好的價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
鄰接表無向圖的Java語言實(shí)現(xiàn)完整源碼
這篇文章主要介紹了鄰接表無向圖的Java語言實(shí)現(xiàn)完整源碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Activiti7與Spring以及Spring Boot整合開發(fā)
這篇文章主要介紹了Activiti7與Spring以及Spring Boot整合開發(fā),在Activiti中核心類的是ProcessEngine流程引擎,與Spring整合就是讓Spring來管理ProcessEngine,有感興趣的同學(xué)可以參考閱讀2023-03-03
JAVA中的deflate壓縮實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫AVA中的deflate壓縮實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
Springboot注入成員變量HttpServletRequest的原理分析
這篇文章主要介紹了Springboot注入成員變量HttpServletRequest的原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java ByteBuffer網(wǎng)絡(luò)編程用法實(shí)例解析
這篇文章主要介紹了Java ByteBuffer網(wǎng)絡(luò)編程用法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
IDEA連接遠(yuǎn)程服務(wù)器簡(jiǎn)化部署流程
筆者每次上線部署應(yīng)用,都要使用第三方的客戶端連接工具,比如?Xshell,FinalShell,Terminus?等,基本的流程步驟及其繁瑣,基于這個(gè)原因,筆者今天探索通過?IDEA?連接遠(yuǎn)程服務(wù)器并上傳文件,減少繁瑣的部署步驟,需要的朋友可以參考下2024-01-01

