1 Long 類方法
1.1 toXXXString
返回類型 |
方法名 |
描述 |
String |
toString() |
toString(value) |
* static String |
toString(long i) |
有意思,這和 i+"" 區別在哪呢?內部調用 getChar() |
* static String |
toString(long i, int radix) |
將 long 值轉成 對應進制的 String 形式 |
static String |
toUnsignedString(long i) |
toUnsignedString(long i,10) |
static String |
toUnsignedString(long i, int radix) |
內部調用 toUnsignedString0(long val, int shift) |
static String |
toHexString(long i) |
toUnsignedString0(i, 4) |
static String |
toOctalString(long i) |
toUnsignedString0(i, 3) |
static String |
toBinaryString(long i) |
toUnsignedString0(i, 1) |
static String |
toUnsignedString0(long val, int shift) |
內部是全是通過 val & mask,val >>>= shift,所以僅僅是通過 mask 取到每一部分的值對應的 radix,所以是無符號的 |
* static String |
formatUnsignedLong(…) |
toUnsignedString0 內部調用它,進行的掩模計算 |
* static BigInteger |
toUnsignedBigInteger(long i) |
內部調用 BigInteger.valueOf(i) |
1.2 parseLong(…) —— 將各種格式的 String 轉成 long
返回類型 |
方法名 |
描述 |
static long |
parseLong(String s) |
parseLong(String s, 10) |
* static long |
parseLong(String s, int radix) |
根據對應的進制,將 s 解析成對應的 long 值,用負數算(有意思) |
static long |
parseUnsignedLong(String s) |
parseUnsignedLong(String s, 10) |
* static long |
parseUnsignedLong(String s, int radix) |
內部調用 parseLong(String s, int radix) 做處理 |
1.3 valueOf —— 將 String、long 轉成 Long
返回類型 |
方法名 |
描述 |
static Long |
valueOf(String s) |
Integer.valueOf(parseLong(s, 10)) |
static Long |
valueOf(String s, int radix) |
Integer.valueOf(parseLong(s,radix)) |
static Long |
valueOf(long l) |
內部走Cache,LongCache 的範圍固定 [-128,127] |
1.4 getLong—— 獲取系統參數值,並轉換爲 Long
返回類型 |
方法名 |
描述 |
static Long |
getLong(String nm) |
getLong(nm, null) |
static Long |
getLong(String nm, long val) |
內部調用 getLong(nm, null) |
static Long |
getLong(String nm, Long val) |
獲取系統 property 參數值,v = System.getProperty(nm),如果爲 null,返回 val 值 |
1.5 compare —— long 值比較
返回類型 |
方法名 |
描述 |
int |
compareTo(Long anotherLong) |
compare(this.value, anotherInteger.value) |
static int |
compare(long x, long y) |
(x < y) ? -1 : ((x == y) ? 0 : 1) |
static int |
compareUnsigned(long x, long y) |
compare(x + MIN_VALUE, y + MIN_VALUE) |
1.6 unsigned long 的除/取餘
返回類型 |
方法名 |
描述 |
static long |
divideUnsigned(long dividend, long divisor) |
toUnsignedBigInteger(dividend). divide(toUnsignedBigInteger(divisor)).longValue() |
static long |
remainderUnsigned(long dividend, long divisor) |
toUnsignedBigInteger(dividend). remainder(toUnsignedBigInteger(divisor)).longValue() |
1.7 取 long 值最高/低位 1 對應的 值
返回類型 |
方法名 |
描述 |
* static long |
highestOneBit(long i) |
最高位取最高 1 及後面全置0的值,代碼解析 |
* static long |
lowestOneBit(long i) |
i & -i |
1.8 LeadingZeros/TrailingZeros/countBit
返回類型 |
方法名 |
描述 |
* static int |
numberOfLeadingZeros(long i) |
i 對應 2 進制的開頭 0 的個數 |
* static int |
numberOfTrailingZeros(long i) |
i 對應 2 進制的末尾 0 的個數 |
* static int |
bitCount(long i) |
i 對應 2 進制中 1 的個數 |
1.9 long 對應二進制的反轉
返回類型 |
方法名 |
描述 |
* static long |
rotateLeft(long i, int distance) |
(i << distance) | (i >>> -distance) |
* static long |
rotateRight(long i, int distance) |
(i >>> distance) | (i << -distance) |
* static long |
reverse(long i) |
二進制按位反轉 :對應的2進制180°反轉 |
* static long |
reverseBytes(long i) |
二進制按byte反轉 |
00000000_00000000_01001101_00011111 -> 原始
11111000_10110010_00000000_00000000 -> 按位反轉
00011111_01001101_00000000_00000000 -> 按字節反轉
1.10 sinum/sum/max/min
返回類型 |
方法名 |
描述 |
static long |
signum(long i) |
負數返回 -1,0 返回 0,正數返回 1 |
static long |
sum(long a, long b) |
a + b |
static long |
max(long a, long b) |
Math.max(a, b) |
static long |
min(long a, long b) |
Math.min(a, b) |
1.11 decode/hashCode/stringSize
返回類型 |
方法名 |
描述 |
static int |
stringSize(long x) |
x 的位數,x 必須爲非負 |
int |
hashCode() |
Long.hashCode(value) |
static int |
hashCode(long value) |
(int)(value ^ (value >>> 32)) |
* static Long |
decode(String nm) |
根據 nm 的類型,判斷它的進制,然後轉成 10 進制 Long |
1.12 構造函數 Long(String)
- 內部調用 parseLong(s,10)
- 如果確定 long 很小,推薦使用 Long.valueOf(String):這樣可以走 cache
2 重點方法解析
參考
jdk1.8_171