zoukankan      html  css  js  c++  java
  • 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,这个有意思多了 噗嗤

  • 相关阅读:
    c语言结构体数组引用
    c语言结构体数组定义的三种方式
    如何为SAP WebIDE开发扩展(Extension),并部署到SAP云平台上
    SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
    使用SAP API portal进行SAP SuccessFactors的API测试
    SAP UI5应用里的页面路由处理
    在SAP WebIDE Database Explorer里操作hdi实例
    如何使用SAP事务码SAT进行UI应用的性能分析
    使用SAP WebIDE进行SAP Cloud Platform Business Application开发
    SAP CRM WebClient UI ON_NEW_FOCUS的用途
  • 原文地址:https://www.cnblogs.com/sariseBlog/p/14942035.html
Copyright © 2011-2022 走看看