Java的基礎性數據類型並不算多,基本類型的包裝類以及String BigInteger BigDecimal等,這是平時經常用到的,雖然天天使用,就是因為太基礎所以很少有人系統認真的對這些數據類型進行分析,本文著重從整體的邏輯思路對這些基礎性的類型進行了介紹. ...
本系列主要是針對於基礎性常用的類型, 一個系統性的簡介 本文為概述 基礎性類型簡介 官方關於數據類型的介紹 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html java中的8種基本數據類型 每種數據類型還有他對應的包裝類
名稱 | 位元組 | 取值範圍 | 預設值 |
byte | 1個位元組 | -128 ~127 | 0 |
short | 2個位元組 | -32,768 ~ 32,767 | 0 |
int | 4個位元組 | -231 ~ 231-1 SE8以及之後,可以用int來表示無符號32位數 0~232-1 |
0 |
long | 8個位元組 | -263 ~ 263-1 SE8以及之後,可以用long來表示無符號64位數 0~264-1 |
0L |
float | 4個位元組 | 單精度 32-bit IEEE 754 浮點數 | 0.0f |
double | 8個位元組 | 雙精度 64-bit IEEE 754 浮點數 | 0.0d |
char | 2個位元組 | 16位 Unicode 字元 '\u0000' (or 0) ~ '\uffff' (65,535 包括) |
'\u0000' |
boolean | 位元組大小並未規定,由實現決定 虛擬機內部沒有支持boolean的指令 boolean編譯之後使用虛擬機中的int代替 oracle公司的虛擬機實現中boolean數組編碼為byte數組 那就是一個boolean 一個位元組 8位 |
true 或者 false | false |
另外為了方便還提供了 java.lang.String,他是不可變的,也不屬於基本數據類型,預設值為 null |
為了支持大數據的計算,還提供了BigInteger 和 BigDecimal |
所以說常用到的,基礎性的數據類型有: |
8種基本數據類型 byte short int long float double char boolean |
8種基本數據類型對應的包裝類 Byte Short Integer Long Float Double Character Boolean |
java.lang.String |
java.math.BigInteger 和 java.math.BigDecimal |
Number是對"數值"這兩個字的概念在Java中的抽象 Byte、Short、Integer、Long、Double、Float、BigDecimal、BigInteger 類的超類 |
規定了作為數值的協議 就是提供xxxValue方法以獲得各種不同的數據類型的值 在類型轉換之間可能會損失精度 |
除了byte和short 上圖方法列表中的其他的方法 是必須提供的 |
二進位位數相關
電腦中整數是以二進位補碼形式存放的 Integer和Long提供了bitCount 方法 用於獲取二進位補碼表示形式的 1 位的數量 |
數據為二進位表示形式,翻轉就是完全的顛倒過來 ,形象點說就是旋轉180度 最後一位變成了最先一位 Integer和Long提供了reverse 方法進行翻轉 |
按照位元組翻轉,reverse是按照位翻轉,最後一位變成最先一位 reverseBytes 是按照位元組翻轉,也就是最後一個位元組變成了最先的一個位元組 |
迴圈移位就是迴圈移動位置 位置就這麼多,迴圈移動就是從一頭到另一頭 移位負距離等同於在另一頭移位 |
rotateLeft 迴圈左移 對應上面一個圖,從最左邊(最高位)移出,從右邊最低位在進入 |
rotateRight 迴圈右移 對應下麵一個圖,從最右邊(最低位)移出,從左邊最高位在進入 |
Integer和Long提供了迴圈右移和迴圈左移 |
divideUnsigned(dividend, divisor) 求商,也就是取整 第一個參數除以第二個參數的商 remainderUnsigned(dividend,divisor)求餘 第一個參數 除以 第二個參數的餘數 |
Integer和Long 有提供 |
他的本意是確定具有指定名稱的系統屬性的整數值 而不是把一個字元串轉換為包裝類,所以一定不要想當然的把它當做解析 比如 getLong 他首先會System.getProperty 如果你傳遞的字元串根本就不是一個系統屬性的名稱,則根本就不會進行下去 而且,第二個值也不是基數,也就是我們說的進位,他是如果前面為null的話,給出的預設值 |
測試一下 |
接受通過以下語法給出的十進位、十六進位和八進位數字 Sign是可選的 |
Sign DecimalNumeral Sign 0x HexDigits Sign 0X HexDigits Sign # HexDigits Sign 0 OctalDigits Sign: - + |
decode 用於將字元串解碼為包裝類對象 不依賴於對象,所以是靜態方法 valueOf也可以將字元串或者基本類型包裝為對象 |
decode 不需要指定進位,可以識別首碼符號 0x 0X # 0 valueOf則不可以識別首碼,要麼指定基數,要麼就是預設十進位,而且他的參數只能是指定基礎的有效字元,不能有首碼符號 |