Java創(chuàng)建數(shù)組、賦值的四種方式詳解(聲明+創(chuàng)建+初始化?)
一、創(chuàng)建數(shù)組的四種方式
以int數(shù)據(jù)類型為例
@Test
public void testNewArray() {
//創(chuàng)建數(shù)組
//法一
int[] arr1 = new int[]{1,2,3,4,5};
System.out.println(arr1.length + " " + arr1[2]); //5 3
//Arrays.toString(Object[]) 將數(shù)組的元素生成字符串,數(shù)組的各個(gè)元素使用方括號(hào)括著 [ ]
System.out.println(Arrays.toString(arr1)); //[1, 2, 3, 4, 5]
//法二 聲明、分配空間并賦值
int[] arr2 = {1,2,3,4};
System.out.println(arr2.length + " " + arr2[2]); //4 3
//法三 聲明數(shù)組時(shí)指定元素個(gè)數(shù),然后賦值。此時(shí)所有的元素值均為0
int[] arr3 = new int[4];
System.out.println(arr3.length + " " + arr3[3]); //4 0
//法四 聲明數(shù)組名、開辟空間、賦值
int[] arr4;
arr4 = new int[]{0,1,2,3};
System.out.println(arr4.length + " " + arr4[2]); //4 2
//創(chuàng)建多維數(shù)組
int[][] doubleArr1 = {{1,2,3},{4,5,6},{7,8,9}};
int m = 3, n = 4, q = 5;
int[][] doubleArr2 = new int[m][n]; //其中n可以省略
int[][][] tArr = new int[m][n][q]; //其中n、q可以省略
}
注意:
- new 數(shù)據(jù)類型[]{},其中花括號(hào)可以省去,但要在[ ]中填寫數(shù)組的個(gè)數(shù);
- 創(chuàng)建多維數(shù)組時(shí) new后面第一個(gè)方括號(hào)中的元素?cái)?shù)量不能省略
二、詳解
1、一維數(shù)組的聲明方式:
type[] arrayName; 或 type arrayName[];
推薦使用第一種格式,因?yàn)榈谝环N格式具有更好的可讀性,表示type[]是一種引用類型(數(shù)組)而不是type類型。建議不要使用第二種方式
int[] intArr;
注:Java語(yǔ)言中聲明數(shù)組時(shí)不能指定其長(zhǎng)度(數(shù)組中元素的個(gè)數(shù)),這是因?yàn)閿?shù)組是一種引用類型的變量,因此使用它定義一個(gè)變量時(shí),僅僅表示定義了一個(gè)引用變量(也就是定一個(gè)了一個(gè)指針),這個(gè)引用變量還未指向任何有效的內(nèi)存,所以定義數(shù)組時(shí)不能指定數(shù)組的長(zhǎng)度。而且由于定義數(shù)組僅僅只是定一個(gè)引用變量,并未指向任何有效的內(nèi)存空間,所以還沒有內(nèi)存空間來存儲(chǔ)數(shù)組元素,因此這個(gè)數(shù)組也不能使用,只有在數(shù)組進(jìn)行初始化后才可以使用。
2、一維數(shù)組的創(chuàng)建
Java中使用關(guān)鍵字new創(chuàng)建數(shù)組對(duì)象,格式為:數(shù)組名 = new 數(shù)組元素的類型 [數(shù)組元素的個(gè)數(shù)]
// 創(chuàng)建數(shù)組,如果在創(chuàng)建的同時(shí)不初始化數(shù)組則必須指定其大小
intArr = new int[5];
// 創(chuàng)建數(shù)組時(shí),不指定數(shù)組大小則必須在創(chuàng)建的同時(shí)初始化數(shù)組
intArray1 = new int[]{0,1,2};
- 一旦使用new關(guān)鍵字為數(shù)組分配了內(nèi)存空間,每個(gè)內(nèi)存空間存儲(chǔ)的內(nèi)容就是數(shù)組元素的值,也就是數(shù)組元素就有了初始值,即使這個(gè)內(nèi)存空間存儲(chǔ)的內(nèi)容是空,這個(gè)空也是一個(gè)值null。也就是說不可能只分配內(nèi)容空間而不賦初始值,即使自己在創(chuàng)建數(shù)組對(duì)象(分配內(nèi)容空間)時(shí)沒有指定初始值,系統(tǒng)也會(huì)自動(dòng)為其分配
- 基礎(chǔ)數(shù)據(jù)類型的包裝類,其默認(rèn)的初始化值均為null,因?yàn)榛A(chǔ)數(shù)據(jù)類型的包裝類創(chuàng)建的數(shù)組屬于引用數(shù)組(對(duì)象數(shù)組),對(duì)象數(shù)組默認(rèn)的初始化值都是null。
3、一維數(shù)組的初始化
數(shù)組的初始化分為靜態(tài)初始化、動(dòng)態(tài)初始化和默認(rèn)初始化:
- 靜態(tài)初始化是數(shù)組在初始化時(shí)由程序員顯式指定每個(gè)數(shù)組元素的初始值而數(shù)組長(zhǎng)度由系統(tǒng)決定。
- 動(dòng)態(tài)初始化是數(shù)組在初始化時(shí)只指定數(shù)組長(zhǎng)度,由系統(tǒng)為數(shù)組元素分配初始值。
//a、數(shù)組靜態(tài)初始化的語(yǔ)法格式:
arrayName = new type[]{element1,element2,element3...};
// 或者使用簡(jiǎn)化的語(yǔ)法格式:
arrayName = {element1,element2,element3...}
//b、數(shù)組動(dòng)態(tài)初始化的語(yǔ)法格式:
arrayName = new type[length];
附:靜態(tài)初始化時(shí)不能指定元素個(gè)數(shù),而動(dòng)態(tài)初始化時(shí)則必須指定元素個(gè)數(shù)。靜態(tài)初始化時(shí)數(shù)組能夠知道元素的個(gè)數(shù)所以不需要指定,而動(dòng)態(tài)初始化時(shí)數(shù)組元素個(gè)數(shù)未知 因此必須指定。
// 靜態(tài)初始化
int intArray2 [] = new int []{20,21,22};
// 靜態(tài)初始化簡(jiǎn)化方式
int intArray3 [] = {30,31,32};
// 動(dòng)態(tài)初始化
int [] intArray4 = new int [3];
// 錯(cuò)誤寫法:靜態(tài)初始化不能指定元素個(gè)數(shù)
// int intErrorArray5[] = new int[3]{50,51,52};
// 錯(cuò)誤寫法:動(dòng)態(tài)初始化必須指定元素個(gè)數(shù)
// int intErrorArray6[] = new int[];
注:一維數(shù)組這一塊記住兩點(diǎn),數(shù)組聲明的時(shí)候是不能指定大小的,也就是說等號(hào)左邊的中括號(hào)中不能包含數(shù)字。另外一旦使用new關(guān)鍵字那么肯定在內(nèi)存中為數(shù)組分配了空間,則必然數(shù)組有默認(rèn)值。數(shù)組是對(duì)象數(shù)據(jù)類型
注:不要靜態(tài)初始化和動(dòng)態(tài)初始化同時(shí)使用,也就是說不要再進(jìn)行數(shù)組初始化時(shí),既指定數(shù)組長(zhǎng)度,也為每個(gè)數(shù)組元素分配初始值。
4、數(shù)組進(jìn)行動(dòng)態(tài)初始化時(shí)系統(tǒng)分配初始值的規(guī)則
- 數(shù)組元素類型是基本類型中的整數(shù)類型(byte、short、int、long),則數(shù)組元素的初始化默認(rèn)值是0
- 數(shù)組元素類型是基本類型中的浮點(diǎn)類型(float、double),則數(shù)組元素的值是0.0
- 數(shù)組元素類型是基本類型中的字符類型(char),則數(shù)組元素的值是’\u0000’
- 數(shù)組元素類型是基本類型中的布爾類型(boolean),則數(shù)組元素的值是false
- 數(shù)組元素類型是基本類型中的引用類型(類、接口、數(shù)組),則數(shù)組元素的值是null
詳情見:http://m.fzitv.net/program/319567ebl.htm
三、數(shù)組存儲(chǔ)的弊端
- 一旦初始化,其長(zhǎng)度就不可修改,長(zhǎng)度不夠用、開辟很大的長(zhǎng)度會(huì)導(dǎo)致空間浪費(fèi)
- 數(shù)組中提供的方法非常有限。添加、刪除、插入等操作 效率很低【為了保證元素的內(nèi)存地址連續(xù),添加或刪除元素時(shí),涉及到前移或者后移】
- 擴(kuò)容麻煩,只能新建一個(gè)更大的數(shù)組,將元素一個(gè)一個(gè)移進(jìn)去,效率低
- 獲取數(shù)組中實(shí)際元素的個(gè)數(shù)的需求,數(shù)組沒有現(xiàn)成的屬性或方法可用
- 數(shù)組存儲(chǔ)數(shù)據(jù)的特點(diǎn):有序、可重復(fù)。對(duì)于無序、不可重復(fù)的需求,不能滿足
為解決以上問題、靈活運(yùn)用,提出Java容器的概念
參考:http://m.fzitv.net/article/93955.htm
總結(jié)
到此這篇關(guān)于Java創(chuàng)建數(shù)組、賦值的四種方式(聲明+創(chuàng)建+初始化 )的文章就介紹到這了,更多相關(guān)Java創(chuàng)建數(shù)組、賦值方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中的底層架構(gòu)核心概念類型轉(zhuǎn)換器詳解
這篇文章主要介紹了Spring中的底層架構(gòu)核心概念類型轉(zhuǎn)換器詳解,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
Java簽名加密與驗(yàn)證實(shí)現(xiàn)過程
本文詳細(xì)介紹了Java中簽名加密驗(yàn)證簽名和SHA1withRSAUtil證書簽名算法的實(shí)現(xiàn)原理及流程,通過描述數(shù)據(jù)準(zhǔn)備、哈希計(jì)算、簽名生成、數(shù)據(jù)封裝、數(shù)據(jù)傳輸和服務(wù)器驗(yàn)證的完整過程,展示了如何在Java中確保數(shù)據(jù)傳輸?shù)陌踩院万?yàn)證2025-10-10
springboot接口接收數(shù)組及多個(gè)參數(shù)的問題及解決
這篇文章主要介紹了springboot接口接收數(shù)組及多個(gè)參數(shù)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Java?spring?MVC環(huán)境中實(shí)現(xiàn)WebSocket的示例代碼
這篇文章主要介紹了Java?spring?MVC環(huán)境中實(shí)現(xiàn)WebSocket,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Spring Security靈活的PasswordEncoder加密方式解析
這篇文章主要介紹了Spring Security靈活的PasswordEncoder加密方式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)
這篇文章主要介紹了MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Maven編譯時(shí)出現(xiàn)中文亂碼的完整解決教程
這篇文章主要為大家詳細(xì)介紹了Maven編譯時(shí)出現(xiàn)中文亂碼的完整解決教程,適合Windows 用戶,Maven 編譯項(xiàng)目時(shí)終端或 IDEA 出現(xiàn)中文亂碼的人群,快跟隨小編一起了解下吧2025-10-10

