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]
 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM