1.Integer
類
Integer
另一個好處是它是一個類,這意味著它可以有字段和方法。而且,當然,它有它們。很多——幾十個。在這裡,我們將考慮最基本的。
該類Integer
有兩個字段,包含該類型的最大和最小可能值int
:
場地 | 描述 |
---|---|
|
int 類型的最大可能值 |
|
int 類型的最小可能值 |
有時您希望將可能的最小值或最大值分配int
給變量。為避免使用難以理解的常量使您的代碼混亂,您可以將其寫得非常清楚,如下所示:
代碼 | 描述 |
---|---|
|
|
該類Integer
還有一些有趣的方法。他們來了:
方法 | 描述 |
---|---|
|
返回一個字符串,它是數字的十六進製表示 |
|
返回一個字符串,它是數字的二進製表示 |
|
返回一個字符串,它是數字的八進製表示 |
|
包裝傳入int 的Integer 對象 |
|
返回從傳遞的字符串中獲得的數字 |
您之前遇到過靜態Integer.parseInt()
方法。讓我們回顧一下它是如何工作的:
int name = Integer.parseInt(string);
如果將包含數字(僅數字)的字符串傳遞給該parseInt()
方法,它將解析該字符串並返回它包含的數字。
其餘的方法也很有用。例如,其中一些可以將傳遞的數字轉換為包含該數字的二進制、八進製或十六進製表示形式的字符串。
2.Double
類
通常,該類Double
與類相似Integer
,只是它包裝了一個double
而不是一個int
. 它還具有我們會感興趣的字段和方法。考慮其中的一些:
該Double
課程有六個有趣的領域:
場地 | 描述 |
---|---|
|
負無窮大 |
|
正無窮大 |
|
最小可能指數 (2 x ) |
|
最大可能指數 (2 x ) |
|
double 類型的最小可能值 |
|
double 類型的最大可能值 |
無窮
如果你除以-1.0
,0.0
你會得到負無窮大。如果除以1.0
,0.0
您將得到正無窮大。您不僅可以將 a 除以double
零,還可以使用它來存儲這些操作的結果。
的指數double
理解指數很容易。在內部,雙精度數由尾數和指數組成。但是這裡指數的值不是,而是。因此,如果指數增加,則數字的總值將增加一倍。10x
2x
1
MIN_EXPONENT == -1024
, 這意味著, 這大約等於2-1024
10-308
當然,這個Double
類有一些有趣的方法:
方法 | 描述 |
---|---|
|
返回一個字符串,它是數字的十六進製表示 |
|
檢查傳遞的數字是否為無窮大。 |
|
檢查傳遞的號碼是否為NaN |
|
包裝傳入的double 對象Double |
|
返回從傳遞的字符串中獲得的數字 |
有趣的是,如果傳遞的數字是正無窮大或負無窮大,有一種isInfinite()
方法會返回。true
該isNaN()
方法類似——它檢查傳遞的數字是否為NaN
(Not-a-Number,一個表示未定義值的特殊常量)。
3.Character
類
這個Character
類之所以有趣,主要是因為它有大量的靜態實用方法,可以讓您檢查字符是否屬於不同的類別。
例子
方法 | 描述 |
---|---|
|
檢查字符是否為字母字符 |
|
檢查字符是否為字母 |
|
檢查字符是否為數字 |
|
檢查字符是否為空格、換行符或分頁符(代碼:12、13、14) |
|
檢查字符是否為空白:空格、製表符等。 |
|
檢查字符是否為小寫 |
|
檢查字符是否為大寫 |
|
將字符轉換為小寫 |
|
將字符轉換為大寫 |
這些方法的一個特點是它們適用於所有已知的字母表:阿拉伯數字被歸類為數字等。
4.Boolean
類
類型Boolean
實際上與類型相同boolean
。差異很小。
下面我們展示了該類的簡化版本Boolean
:
代碼 | 描述 |
---|---|
|
常量: TRUE è FALSE Variable Boolean class constructor 方法返回內部變量的值 This static method 轉換 true 為TRUE 和false to FALSE 。 |
該Boolean
類型有兩個常量(兩個字段):
類的常量 | 對應布爾類型 | 描述 |
---|---|---|
|
|
真的 |
|
|
錯誤的 |
您可以像使用類型一樣使用它們boolean
:
代碼 | 筆記 |
---|---|
|
該類Boolean 是唯一可以在條件內編寫的類 |
|
所有三個變量都等於true /TRUE |
|
可以同時使用equals 和比較常量== 這也可以。 |
自動裝箱在這裡效果很好。這意味著您可以像使用類型一樣使用此類型boolean
——沒有需要注意的陷阱。
它是如何寫的 | 怎麼運行的 |
---|---|
|
|
boolean
這裡是和類型的比較Boolean
:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
如果你真的需要一個獨立的Boolean
對象,那麼你需要顯式地創建它:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
再舉一個例子,我們將使用Boolean
an 的內部if
:
代碼 | 筆記 |
---|---|
|
這將編譯和工作 |
這將編譯,但它不會工作!
代碼 | 筆記 |
---|---|
|
錯誤。這一行會拋出異常 |
5. 自動裝箱時緩存值
有一些與整數包裝器類型相關的陷阱。
如您所知,如果我們比較 anint
和 an Integer
, theInteger
將轉換為 an int
:
它是如何寫的 | 怎麼運行的 |
---|---|
|
|
如果將兩個Integer
對象相互比較,它們不會轉換為int
s:
代碼 | 控制台輸出 |
---|---|
|
|
a == c
and , but ,因為當我們比較and時,我們是在比較引用。這基本上是我們所期望的。b == c
a != b
a
b
驚喜
但是如果我們替換500
為100
,那麼我們會得到完全不同的結果:
代碼 | 控制台輸出 |
---|---|
|
|
這裡的問題是在自動裝箱期間並不總是實際創建新Integer
對象。-128
通過inclusive緩存對象的值127
。
該類Integer
有一個存儲對象的隱藏數組:Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
如果你寫Integer x = 128
,那麼自動裝箱過程會創建一個新對象,但如果你寫Integer x = 127
,那麼自動裝箱過程會從緩存(從數組)中檢索現有對象。
如果您不希望該Integer
對象來自緩存,則必須通過以下方式顯式創建它:Integer x = new Integer(127);
所有包裝器類型都有這樣的緩存:Integer
, Long
, Byte
, Short
, Boolean
。對於Boolean
類型來說,它TRUE
和FALSE
值都是常量,所以本質上也是緩存的。
GO TO FULL VERSION