• JDK源码笔记02 Long


    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,这个有意思多了 噗嗤

  • 相关阅读:
    Oracle 常用的V$ 视图脚本
    Oracle11g新特性
    深入浅出Oracle:Redo的作用
    oracle表空间操作详解
    Oracle Directory
    linux下手动删除数据库实例
    Oracle OS认证以及口令文件
    监控Oracle数据库的常用shell脚本
    Oracle 帐号基本管理
    Oracle小知识
  • 原文地址:https://www.cnblogs.com/sariseBlog/p/14942035.html
Copyright © 2020-2023  润新知