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ù)組的各個元素使用方括號括著 [ ] 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ù),然后賦值。此時所有的元素值均為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ù)類型[]{},其中花括號可以省去,但要在[ ]中填寫數(shù)組的個數(shù);
- 創(chuàng)建多維數(shù)組時 new后面第一個方括號中的元素數(shù)量不能省略
二、詳解
1、一維數(shù)組的聲明方式:
type[] arrayName; 或 type arrayName[];
推薦使用第一種格式,因為第一種格式具有更好的可讀性,表示type[]是一種引用類型(數(shù)組)而不是type類型。建議不要使用第二種方式
int[] intArr;
注:Java語言中聲明數(shù)組時不能指定其長度(數(shù)組中元素的個數(shù)),這是因為數(shù)組是一種引用類型的變量,因此使用它定義一個變量時,僅僅表示定義了一個引用變量(也就是定一個了一個指針),這個引用變量還未指向任何有效的內(nèi)存,所以定義數(shù)組時不能指定數(shù)組的長度。而且由于定義數(shù)組僅僅只是定一個引用變量,并未指向任何有效的內(nèi)存空間,所以還沒有內(nèi)存空間來存儲數(shù)組元素,因此這個數(shù)組也不能使用,只有在數(shù)組進行初始化后才可以使用。
2、一維數(shù)組的創(chuàng)建
Java中使用關(guān)鍵字new創(chuàng)建數(shù)組對象,格式為:數(shù)組名 = new 數(shù)組元素的類型 [數(shù)組元素的個數(shù)]
// 創(chuàng)建數(shù)組,如果在創(chuàng)建的同時不初始化數(shù)組則必須指定其大小 intArr = new int[5]; // 創(chuàng)建數(shù)組時,不指定數(shù)組大小則必須在創(chuàng)建的同時初始化數(shù)組 intArray1 = new int[]{0,1,2};
- 一旦使用new關(guān)鍵字為數(shù)組分配了內(nèi)存空間,每個內(nèi)存空間存儲的內(nèi)容就是數(shù)組元素的值,也就是數(shù)組元素就有了初始值,即使這個內(nèi)存空間存儲的內(nèi)容是空,這個空也是一個值null。也就是說不可能只分配內(nèi)容空間而不賦初始值,即使自己在創(chuàng)建數(shù)組對象(分配內(nèi)容空間)時沒有指定初始值,系統(tǒng)也會自動為其分配
- 基礎(chǔ)數(shù)據(jù)類型的包裝類,其默認的初始化值均為null,因為基礎(chǔ)數(shù)據(jù)類型的包裝類創(chuàng)建的數(shù)組屬于引用數(shù)組(對象數(shù)組),對象數(shù)組默認的初始化值都是null。
3、一維數(shù)組的初始化
數(shù)組的初始化分為靜態(tài)初始化、動態(tài)初始化和默認初始化:
- 靜態(tài)初始化是數(shù)組在初始化時由程序員顯式指定每個數(shù)組元素的初始值而數(shù)組長度由系統(tǒng)決定。
- 動態(tài)初始化是數(shù)組在初始化時只指定數(shù)組長度,由系統(tǒng)為數(shù)組元素分配初始值。
//a、數(shù)組靜態(tài)初始化的語法格式: arrayName = new type[]{element1,element2,element3...}; // 或者使用簡化的語法格式: arrayName = {element1,element2,element3...} //b、數(shù)組動態(tài)初始化的語法格式: arrayName = new type[length];
附:靜態(tài)初始化時不能指定元素個數(shù),而動態(tài)初始化時則必須指定元素個數(shù)。靜態(tài)初始化時數(shù)組能夠知道元素的個數(shù)所以不需要指定,而動態(tài)初始化時數(shù)組元素個數(shù)未知 因此必須指定。
// 靜態(tài)初始化 int intArray2 [] = new int []{20,21,22}; // 靜態(tài)初始化簡化方式 int intArray3 [] = {30,31,32}; // 動態(tài)初始化 int [] intArray4 = new int [3]; // 錯誤寫法:靜態(tài)初始化不能指定元素個數(shù) // int intErrorArray5[] = new int[3]{50,51,52}; // 錯誤寫法:動態(tài)初始化必須指定元素個數(shù) // int intErrorArray6[] = new int[];
注:一維數(shù)組這一塊記住兩點,數(shù)組聲明的時候是不能指定大小的,也就是說等號左邊的中括號中不能包含數(shù)字。另外一旦使用new關(guān)鍵字那么肯定在內(nèi)存中為數(shù)組分配了空間,則必然數(shù)組有默認值。數(shù)組是對象數(shù)據(jù)類型
注:不要靜態(tài)初始化和動態(tài)初始化同時使用,也就是說不要再進行數(shù)組初始化時,既指定數(shù)組長度,也為每個數(shù)組元素分配初始值。
4、數(shù)組進行動態(tài)初始化時系統(tǒng)分配初始值的規(guī)則
- 數(shù)組元素類型是基本類型中的整數(shù)類型(byte、short、int、long),則數(shù)組元素的初始化默認值是0
- 數(shù)組元素類型是基本類型中的浮點類型(float、double),則數(shù)組元素的值是0.0
- 數(shù)組元素類型是基本類型中的字符類型(char),則數(shù)組元素的值是’\u0000’
- 數(shù)組元素類型是基本類型中的布爾類型(boolean),則數(shù)組元素的值是false
- 數(shù)組元素類型是基本類型中的引用類型(類、接口、數(shù)組),則數(shù)組元素的值是null
詳情見:http://www.dbjr.com.cn/program/319567ebl.htm
三、數(shù)組存儲的弊端
- 一旦初始化,其長度就不可修改,長度不夠用、開辟很大的長度會導(dǎo)致空間浪費
- 數(shù)組中提供的方法非常有限。添加、刪除、插入等操作 效率很低【為了保證元素的內(nèi)存地址連續(xù),添加或刪除元素時,涉及到前移或者后移】
- 擴容麻煩,只能新建一個更大的數(shù)組,將元素一個一個移進去,效率低
- 獲取數(shù)組中實際元素的個數(shù)的需求,數(shù)組沒有現(xiàn)成的屬性或方法可用
- 數(shù)組存儲數(shù)據(jù)的特點:有序、可重復(fù)。對于無序、不可重復(fù)的需求,不能滿足
為解決以上問題、靈活運用,提出Java容器的概念
參考:http://www.dbjr.com.cn/article/93955.htm
總結(jié)
到此這篇關(guān)于Java創(chuàng)建數(shù)組、賦值的四種方式(聲明+創(chuàng)建+初始化 )的文章就介紹到這了,更多相關(guān)Java創(chuàng)建數(shù)組、賦值方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+Redis執(zhí)行l(wèi)ua腳本的5種方式總結(jié)
Lua是一種快速、輕量級的腳本語言,廣泛應(yīng)用于各種領(lǐng)域,包括數(shù)據(jù)庫,Redis作為一個內(nèi)嵌Lua解釋器的NoSQL數(shù)據(jù)庫,允許通過Lua腳本在服務(wù)器端執(zhí)行一些復(fù)雜的操作,本文給大家介紹了使用SpringBoot Redis執(zhí)行l(wèi)ua腳本的五種方式,需要的朋友可以參考下2023-11-11Java連接PostgreSql數(shù)據(jù)庫及基本使用方式
這篇文章主要介紹了Java連接PostgreSql數(shù)據(jù)庫及基本使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03java通過Callable和Future來接收線程池的執(zhí)行結(jié)果
這篇文章主要介紹了java通過Callable和Future來接收線程池的執(zhí)行結(jié)果,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-08-08一文詳細解析Java?8?Stream?API中的flatMap方法
這篇文章主要介紹了Java?8?Stream?API中的flatMap方法的相關(guān)資料,flatMap方法是Java?StreamAPI中的重要中間操作,用于將流中的每個元素轉(zhuǎn)換為一個新的流,并將多個流合并為一個單一的流,常用于處理嵌套集合和一對多映射,需要的朋友可以參考下2024-12-12