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