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語言中聲明數(shù)組時(shí)不能指定其長度(數(shù)組中元素的個(gè)數(shù)),這是因?yàn)閿?shù)組是一種引用類型的變量,因此使用它定義一個(gè)變量時(shí),僅僅表示定義了一個(gè)引用變量(也就是定一個(gè)了一個(gè)指針),這個(gè)引用變量還未指向任何有效的內(nèi)存,所以定義數(shù)組時(shí)不能指定數(shù)組的長度。而且由于定義數(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ù)組長度由系統(tǒng)決定。
- 動(dòng)態(tài)初始化是數(shù)組在初始化時(shí)只指定數(shù)組長度,由系統(tǒng)為數(shù)組元素分配初始值。
//a、數(shù)組靜態(tài)初始化的語法格式: arrayName = new type[]{element1,element2,element3...}; // 或者使用簡化的語法格式: arrayName = {element1,element2,element3...} //b、數(shù)組動(dòng)態(tài)初始化的語法格式: 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)初始化簡化方式 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ù)組長度,也為每個(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://www.dbjr.com.cn/program/319567ebl.htm
三、數(shù)組存儲(chǔ)的弊端
- 一旦初始化,其長度就不可修改,長度不夠用、開辟很大的長度會(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://www.dbjr.com.cn/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)文章
SpringBoot+Redis執(zhí)行l(wèi)ua腳本的5種方式總結(jié)
Lua是一種快速、輕量級(jí)的腳本語言,廣泛應(yīng)用于各種領(lǐng)域,包括數(shù)據(jù)庫,Redis作為一個(gè)內(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ù)庫及基本使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java實(shí)現(xiàn)簡易計(jì)算器(逆波蘭表達(dá)式)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡易計(jì)算器,逆波蘭表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07java多線程應(yīng)用實(shí)現(xiàn)方法
以前沒有寫筆記的習(xí)慣,現(xiàn)在慢慢的發(fā)現(xiàn)及時(shí)總結(jié)是多么的重要了,呵呵。雖然才大二,但是也快要畢業(yè)了,要加油2012-11-11java通過Callable和Future來接收線程池的執(zhí)行結(jié)果
這篇文章主要介紹了java通過Callable和Future來接收線程池的執(zhí)行結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08一文詳細(xì)解析Java?8?Stream?API中的flatMap方法
這篇文章主要介紹了Java?8?Stream?API中的flatMap方法的相關(guān)資料,flatMap方法是Java?StreamAPI中的重要中間操作,用于將流中的每個(gè)元素轉(zhuǎn)換為一個(gè)新的流,并將多個(gè)流合并為一個(gè)單一的流,常用于處理嵌套集合和一對(duì)多映射,需要的朋友可以參考下2024-12-12