【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组
目錄
1 String字符串
2 數(shù)組
1 String字符串
? ? ? ? Java沒有內(nèi)置的字符串類型,而是在Java類庫中提供了一個預(yù)定義類--String。?在Java中把每一個使用雙引號括起來的字符串都看做是String類的一個實(shí)例化對象。
????????String常被稱作是不可變字符串類型,那么有人就有疑問了,我定義的字符串變量的值可以改變啊,原因是String的不可變在于:以""方式給出來的字符串對象在字符串常量池中存儲,你定義的字符串變量存儲的是地址值指向字符串對象,你看到字符串變量的值改變了是因?yàn)樽址兞看鎯Φ牡刂分底兞?#xff0c;但是字符串對象的值一直在字符串變量池中無法改變。
1.1 字符串對象的兩種創(chuàng)建方式
推薦使用第一種
??? 兩種方式的區(qū)別:第一種方式產(chǎn)生的字符串對象會在字符串常量池中存儲,且相同的內(nèi)容只會在其中存儲一份。第二種方式產(chǎn)生的字符串對象會放在堆內(nèi)存中,創(chuàng)建幾次就有幾個字符串對象。
1.2 String字符串常見面試題
??
?
?1.3 常用API:
1.4 字符串判等
? ? ? ? 字符串的值判等要用equals方法:字符串1.equals(字符串2),前面講過,字符串變量存儲的是字符串對象的地址,如果簡單地使用 == 進(jìn)行判等的話比對的是兩個字符串對象的地址值,有時候雖然兩個字符串的值相等,但是對象的地址值卻不一樣,返回的結(jié)果就與我們所期望的值判等結(jié)果所不一樣
1.5 空字符串和Null串
? ? ? ? 空字符串是""是長度為0的字符串,而Null串是變量值為null的String類型字符串變量。空字符串歸根結(jié)底也是一個字符串對象,但是Null串只是一個變量(還未與對象進(jìn)行關(guān)聯(lián)的變量)。有時候在對一個字符串進(jìn)行調(diào)用String字符串API的時候會報(bào)錯,原因就是Null串無法調(diào)用那些API,而空串調(diào)用API的意義也不大,所以說應(yīng)該使用if (str != null && str.length() != 0)判斷一下。
2 數(shù)組
????????數(shù)組就是用來存儲一批同種類型數(shù)據(jù)的內(nèi)存區(qū)域(可以借容器的概念方便理解),如果使用變量定義存儲很多相同類型且可以分為一組的數(shù)據(jù),會很繁瑣,此時使用數(shù)組簡便了代碼的書寫。
2.1 數(shù)組的初始化
????????數(shù)組的初始化分為靜態(tài)初始化和動態(tài)初始化,靜態(tài)初始化就是在數(shù)組定義的時候就直接給數(shù)組賦值,動態(tài)初始化就是先定義一個數(shù)組再初始化。
靜態(tài)初始化的格式如下:
?以上兩種靜態(tài)初始化的效果相同,但是一般實(shí)際開發(fā)中更喜歡使用第二種簡便寫法
動態(tài)初始化的格式如下:?
?? 定義數(shù)組時長度可以是0,長度為0的數(shù)組≠元素為null的數(shù)組
?? 數(shù)組定義完成之后,在未進(jìn)行賦值之前所有的元素會按照數(shù)據(jù)類型默認(rèn)初始化為相應(yīng)的值,整型:byte、short、int、long會初始化為0;字符型:char也初始化為0,只不過是0的字符形式計(jì)算機(jī)表示出來會亂碼;浮點(diǎn)型:float、double會初始化為0.0;布爾型:boolean會初始化為false;其他引用數(shù)據(jù)類型:String、類、接口、數(shù)組……會初始化為null
?? 使用數(shù)組名 = null的形式對數(shù)組變量進(jìn)行賦值之后,可以使用數(shù)組名輸出結(jié)果為null,但是使用數(shù)組名.length或者是數(shù)組名[索引]等方式時會拋NullPointerException (空指針異常)
?? 數(shù)組一旦定義出來,它的類型和長度就固定好了,若是存放其他類型的元素會在編譯時就無法通過,若是訪問長度以外的元素會拋IArrayIndexOutOfBoundsException (數(shù)組索引越界異常)。 但是數(shù)組中的元素值并不固定,可以使用賦值的形式對數(shù)組中的元素進(jìn)行改變。?
2.2 數(shù)組的底層原理? ??
? ? ? ? 數(shù)組初始化的時候在內(nèi)存中創(chuàng)建一塊地址連續(xù)的區(qū)域(又叫創(chuàng)建一個數(shù)組對象)用于存儲元素,又創(chuàng)建一個數(shù)組變量底層存儲了數(shù)組對象的地址信息,數(shù)組通過地址去引用數(shù)組對象,故稱數(shù)組是一種引用數(shù)據(jù)類型。?2.3 數(shù)組的訪問和遍歷
????????數(shù)組中的所有元素都對應(yīng)著一個索引,以后再看到索引就應(yīng)該知道索引都是從零開始的,當(dāng)我們想要訪問數(shù)組元素的時候就可以使用以下方式來訪問。
數(shù)組名[索引]
還可以使用以下格式獲取數(shù)組的長度
數(shù)組名.length
數(shù)組的遍歷
?2.4 多維數(shù)組
? ? ? ? 多維數(shù)組就是數(shù)組作為數(shù)組的元素進(jìn)行存儲,常見的多維數(shù)組形式是二維數(shù)組,其他多維數(shù)組參考二維數(shù)組。二維數(shù)組就是一維數(shù)組作為數(shù)組的元素進(jìn)行存儲的形式,可以借助表格的概念幫助理解二維數(shù)組,借行列的概念理解二維。
二維數(shù)組的靜態(tài)初始化和定義
?二維數(shù)組的定義可以不指定數(shù)組的列數(shù)但是不能不指定數(shù)組的行數(shù),除了以上四種二維數(shù)組的定義和初始化,還有下面兩種初始化格式但是并不推薦使用,除此之外其他都是錯誤的。
二維數(shù)組的底層原理圖
二維數(shù)組元素的訪問
數(shù)組名[行索引][列索引]?
比如說,有一個3行4列名為nums的二維數(shù)組[[1,2,3,4],[5,6,7,8],[9,10,11,12]],nums[2][3]訪問的就是行索引為2列索引為3的元素==>值為12。索引是從0開始的!nums[2]訪問的就是行索引是2的元素,因?yàn)槎S數(shù)組是數(shù)組下面存數(shù)組,故返回的是一個一維數(shù)組的地址值。
二維數(shù)組的長度
數(shù)組名.length
?? 通過以上形式獲取到的長度是二維數(shù)組的行數(shù),而數(shù)組名[行索引].length獲取到的是數(shù)組在該索引行的列數(shù)
二維數(shù)組的遍歷
?二維數(shù)組的默認(rèn)初始化值
二維數(shù)組的定義方式不同默認(rèn)初始化值也不同
????????如果定義語句為int[ ][ ] num = new int[3][2];的話,num[行索引][列索引]的輸出為0,num[行索引]的輸出是相應(yīng)的地址值;
????????如果定義語句是int[ ][ ] num = new int[3][ ];的話,num[行索引][列索引]的輸出為0,num[行索引]的輸出是null。
2.5 Arrays工具類
上一篇:
下一篇:
總結(jié)
以上是生活随笔為你收集整理的【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合肥消费券哪些店可以用
- 下一篇: java 按位_Java中的按位运算