JavaSE之Long 詳解 Long的方法簡介以及用法


基本功能
Long 類在對象中包裝了基本類型 long 的值
每一個 Long 類型的對象都包含一個 long 類型的字段

static long MAX_VALUE long 8個字節
最大值2^63-1
十六進制:  0x8000000000000000L
static long MIN_VALUE 最小值-2^63
十六進制:
0x7fffffffffffffffL
static int SIZE
二進制補碼形式表示值時的位數
@Native public static final int SIZE = 64; 8個字節就是64位

static Class<Long> TYPE 表示基本類型 long 的 Class 實例


方法分類

實例方法
構造方法
能夠經過long或者String構造
image_5b974562_3c47[6]
字符串參數形式的方法,  內部調用parseLong
image_5b974562_37a5[6]
java.lang.Long.Long(long)
java.lang.Long.Long(String)
獲取指定類型的值
直接返回強轉形式
好比:
(byte)value   (short)value   ......
java.lang.Long.byteValue()
java.lang.Long.shortValue()
java.lang.Long.intValue()
java.lang.Long.longValue()
java.lang.Long.floatValue()
java.lang.Long.doubleValue()
對象常規方法
toString依賴靜態方法 static String toString(long i)
hashCode 依賴靜態方法 hashCode static int hashCode(long value)
equals 比較內部值是否相同
image_5b974562_221c[6]
compareTo 依賴靜態方法static int compare(long x, long y)
java.lang.Long.toString()
java.lang.Long.hashCode()
java.lang.Long.equals(Object)
java.lang.Long.compareTo(Long)
此係列都是獲取指定系統屬性的long值相關
第一個參數是經過 System.getProperty(java.lang.String) 方法能夠訪問到的系統屬性的名稱
以 long 值的形式解釋此屬性的字符串值,並返回表示此值的 Long 對象
也就是說參數String爲一個系統屬性的字符串名稱
若是指定名稱沒有屬性,或者指定名稱爲空或 null,抑或屬性不具備正確的數字格式時,則返回 null

並非轉換解析字符串爲Long,並非轉換解析字符串爲Long,並非轉換解析字符串爲Long,
java.lang.Long.getLong(String)
java.lang.Long.getLong(String, long)
java.lang.Long.getLong(String, Long)


由上面實例方法的依賴性也能夠看得出來,Long類自己靜態方法的強大

靜態工具方法
toXXXString就是轉換爲String形式
具體的XXX是什麼就是轉換爲 什麼
toString(long, int)轉換爲指定進製表示的字符串形式,toString(long)爲簡化版默認十進制
toString(long)
toString(long, int)
toUnsignedString(long, int)轉換爲指定進製表示的無符號整數的字符串形式
toUnsignedString(long)爲簡化版默認十進制
toUnsignedString(long, int)
toUnsignedString(long)
以十六進制無符號整數形式返回 long 參數的字符串表示形式
以八進制無符號整數形式返回 long 參數的字符串表示形式
以二進制無符號整數形式返回 long 參數的字符串表示形式
toHexString(long)
toOctalString(long)
toBinaryString(long)
parseLong 都是將字符串解析爲long,  基本類型!
parseLong(String, int)將 string 參數解析爲第二個參數指定進制形式的有符號的 long
parseLong(String)爲簡化形式,默認十進制
parseUnsignedLong是parseLong的無符號形式
相似,雙參數指定基數進制,單參數默認十進制
使用時須要注意,對應基數(進制)的轉換,須要對應的字符,好比十進制你就不能出現十六進制的A
parseLong(String, int)
parseLong(String)
parseUnsignedLong(String, int)
parseUnsignedLong(String)
valueOf都是將字符串解析爲Long,  包裝類型
可是,在-128~127之間會使用緩存的值,不在範圍內的建立新對象
因此,除非有必要特地建立對象,不然應該使用這個來獲取Long對象
valueOf(String, int) 轉換指定基數的字符串爲Long,  valueOf(String)爲他的十進制形式
valueOf(String, int)
valueOf(String)
valueOf(long)
image_5b974562_3976[6] hashCode(long)
對於基本類型long的求和 和 大小比較,返回符合條件的long
sum(long, long)
max(long, long)
min(long, long)
image_5b974562_69db[6]
能夠直接將指定形式的字符串進行解析 根據字符串的前綴進行自動匹配
而後,返回一個Long
decode(String)
比較大小與無符號比較大小
image_5b974562_4543[6]
無符號的先轉換下,而後調用compare
image_5b974562_3d77[6]
compare(long, long)
compareUnsigned(long, long)
無符號的商與求餘
divideUnsigned(long, long)
remainderUnsigned(long, long)
返回符號
若是指定值爲負,則返回值 -1
若是指定值爲零,則返回 0
若是指定值爲正,則返回 1
signum(long)
reverse表示翻轉,翻轉就是從前日後顛倒過來
逐個比特進行翻轉 或者逐個字節(也就是8位爲一個單位)進行翻轉

看下圖就很容易理解 
188的二進制 1011  1100
image_5b974562_502[6]
reverse(long)
reverseBytes(long)
rotate表示循環移位
循環左移和循環右移
移位負數距離等同於另外一個方向的移位

rotateLeft(long, int)
rotateRight(long, int)
api解釋比較抽象,直白的說就是二進制補碼序列中
選擇從左邊開始數(高位)第一個1  或者從右邊開始數(低位)第一個1
其他的位置全都寫0
因此,對於highestOneBit
若是是0 返回0 ,由於沒有一個1
若是是負數,返回的就是最左邊一位是1 其他全都是0 也就是Long的最小值
若是是正數,第一位就是原來的最高位,可是抹掉了全部的零頭,就是小於等於這個數的第一個2的N次方
對於highestOneBit 
若是是0 返回0
不然返回的將是2的N次方   形如1 ....n個零
highestOneBit(long)
lowestOneBit(long)
與highestOneBit  和 lowestOneBit,本質是互通的,找到了1的位置也就知道了0的個數
知道了0的個數,也就找到了1的位置
返回的是這兩個位置的地方,左邊和右邊的零的個數

numberOfLeadingZeros(long)
numberOfTrailingZeros(long)
返回二進制補碼形式下1的個數
image_5b974562_6f98[6]
bitCount(long)


特別注意:

value of 與new Long
valueOf就是根據指定的long或者String 返回一個Long對象

java.lang.Long.valueOf(long)是根本方法
image_5b974562_3723[6]
能夠看得出來,他會使用LongCache緩存256個對象(0~255)
靜態內部類,使用的時候,static塊中初始化
image_5b974562_29c9[6]

java.lang.Long.valueOf(String, int)是藉助於parseLong進行轉換
image_5b974562_1875[6]
java.lang.Long.valueOf(String)是他的默認的十進制形式的
image_5b974562_5147[6]

簡言之就是最核心是valueOf(long),在指定範圍內他是有緩存的,不在指定範圍內,那麼將會建立對象
因此,若是能夠,儘可能不要使用new Long

parseLong
從valueOf看得出來,帶參數的藉助的都是parseLong
parseLong是返回的long 基本數據類型,valueOf至關於他的裝箱形式(固然,valueOf還有使用緩存數據的功能)

decode(String nm)
decode將字符串轉換爲Long,聽起來好像跟valueOf 差很少
都是根據字符串轉變爲Long對象
可是ValueOf要麼指定基數要麼就是默認十進制,並且不認識0X.#這種形式
decode不須要指定基數,能夠根據字符串的前綴進行本身判斷基數,用起來比valueOf更加靈活

getLong
getLong根本就不是看起來的樣子
java.lang.Long.getLong(String)
java.lang.Long.getLong(String, long)
java.lang.Long.getLong(String, Long)
他只是valueOf的一個很是小的子集,僅僅是字符串爲系統屬性的某個變量名時,纔是能夠用的 ,纔是能夠解析的
你傳入getLong("16"),根本不行
image_5b974562_4e41[5]
相關文章
相關標籤/搜索