something before start
写到第二篇了:D
有很多类似的方法就不重复描述了,稍微带过。主要讲讲和Integer差别比较大的方法
另外这里我写的方法概览里不一定有所有的方法,因为有的我懒得写下来或者觉得没必要。所以这个博客其实不是使用说明书而是源码阅读说明:D
和Integer区别
一些常量有区别,Long是64位,所以他的MIN_VALUE
MAX_VALUE
相应变长了
一些方法如toString
getChars
parseLong
valueOf
decode
getLong
以及一些位处理方法,和Integer的差别只在于位数变长了
同时缓存基本上完全一样
方法以及子类概览
方法以及简单说明
输出字符串
toUnsignedString(long i, int radix)
//二倍数进制调用toUnsignedString0(long val, int shift)
//十进制 先右移1位然后除以5(逻辑上除以10,不过这样不会影响符号位),把除了个位的部分转换成字符串,然后在最后拼接个位数。 不这么做的话也可以通过转换成BigInteger,但是性能会差点。
//否则调用toUnsignedBigInteger(i).toString(radix);
toUnsignedString0(long val, int shift)
//类似于Ingeter 采用位运算来进行短除法,结果逐位放在byte[]数组中,最后返回字符串
BigInteger相关
private static toUnsignedBigInteger(long i)
//位运算取出高32位和低32位,再通过BigInteger合并高低位
fastUUID
Long类里提供了UUID的toString方法,即fastUUID(long lsb, long msb)
,具体可以参考这篇博客
运算
divideUnsigned(long dividend, long divisor)
//divisor<0 则只需要比无符号长整形数值大小 返回0或1
//dividend>0 直接除
//否则先转换成BigInteger再进行运算
杂七杂八
哈希
public static int hashCode(long value) {
return (int)(value ^ (value >>> 32));
}
方法详解
解析字符串
parseUnsignedLong
签名:public static long parseUnsignedLong(String s, int radix) throws NumberFormatException
功能:将无符号长整数字符串转换成long
说明:
相关方法:
parseUnsignedLong(CharSequence s, int beginIndex, int endIndex, int radix)
parseUnsignedLong(String s)
主要代码说明:
//参数校验
//判断,如果是能确保不会是负数的话调用parseLong(String s, int radix)
//len <= 12 || // 最大值在最大的进制下是13位,所以小于等于12位可以不考虑符号
//(radix == 10 && len <= 18)) { //十进制最多19位,18位及以下不需要考虑符合
//先计算len-1长度的大小 作为first
long first = parseLong(s, 0, len - 1, radix);
//取出最后一位的大小 作为second
//Character.digit()的功能是取出符号对应的数字的值
int second = Character.digit(s.charAt(len - 1), radix);
//判断second是否大于0,小于等于0则抛出异常
long result = first * radix + second;
//判断result是否溢出了 源码里还写了证明,数字问题我有点懒得看:C
//没问题则返回result
总结
就和Integer差不多,不过看这个的时候顺带看了一眼BigInteger,这个有意思多了 噗嗤