美文网首页
走进String的源码

走进String的源码

作者: huangxiongbiao | 来源:发表于2018-10-25 15:28 被阅读1次

    1、String源码简单分析

    主要成员属性

    一个char类型的value数组和一个hash值


    image.png
    equals

    判断逻辑先判断是否是同一个对象,判断类型为字符串,value的每一位都相等。


    image.png
    hashcode

    hashcode默认为0,不为0则直接返回,为0则X31叠加。选择31一个不大不小的质数避免hash冲突


    image.png
    codePoint

    Unicode的编码空间从U+0000到U+10FFFF
    而java中的char默认为两个字节,利用辅助区间鉴别三个字节的高低补位的字符
    UTF-16将保留下来的0xD800-0xDFFF区段的码位来对辅助平面的字符的码位进行编码
    在0xD800-0xDFFF区间内的代码点由高低代理一起组成一个字符
    0-0xFFFFF分为20位分为前10位和后10位值范围为0~0x3FF
    高10位加上0xD800为高位代理值范围为0xD800~0xDBFF
    低10位加上0xDC00为地位代理值范围为0xDC00~0xDFFF
    高低代理的值区间刚好落在BMP区间内的0xD800-0xDFFF流出的辅助区间内,用于区别是两个字节还是三个字节的字符

    image.png

    高低位代理计算方法

    image.png
    image.png

    判断字符是否为两个字符基础平面,判断是否在unicode编码区间内

    image.png

    2、知识点总结

    1、Arrays.copyOfRange可以复制数组,native方法下载openjdk源码查看
    2、Character.isBmpCodePoint,isValidCodePoint代码点unicode,正常两个字节。三个字节的通过辅助区别判断,高低位代理计算
    3、StringCoding.decode中使用了ThreadLocal
    4、equals ==,判断类型为字符串,value的每一位都相等。
    5、hashcode默认为0,有则直接返回没有则X31叠加。选择一个不大不小的质数避免hash冲突
    5、相关类StringBuffer,StringBuilder,Arrays,Character,StringCoding,Pattern

    相关文章

      网友评论

          本文标题:走进String的源码

          本文链接:https://www.haomeiwen.com/subject/cvxctqtx.html