java String源码浅出

Posted 那天ws

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java String源码浅出相关的知识,希望对你有一定的参考价值。

1、public char charAt(int index) 返回指定索引处的 char 值。

源码:

技术分享图片
    =====================String.class============================
    public char charAt(int index) {
        if (isLatin1()) { //Latin1单字节编码
            return StringLatin1.charAt(value, index);
        } else { // UTF-16双字节编码
            return StringUTF16.charAt(value, index);
        }
    }
    ==================StringLatin1.class=========================
    public static char charAt(byte[] value, int index) {
        if (index < 0 || index >= value.length) { // 判断是否越界
            throw new StringIndexOutOfBoundsException(index);
        }
        // 取出低8位并转为char类型
        return (char)(value[index] & 0xff);
    }
    ==================StringUTF16.class=========================
    public static char charAt(byte[] value, int index) {
        checkIndex(index, value);
        return getChar(value, index);
    }
    // UTF-16编码的字符串字符数,UTF-16双字节编码,字符数等于字节除以2
    public static int length(byte[] value) {
        return value.length >> 1;
    }
    
    @HotSpotIntrinsicCandidate
    // intrinsic performs no bounds checks
    static char getChar(byte[] val, int index) {
        // 判断是否越界
        assert index >= 0 && index < length(val) : "Trusted caller missed bounds check";
        // 字符所在的字节启始位置
        index <<= 1;
        // 按字节序还原字符
        return (char)(((val[index++] & 0xff) << HI_BYTE_SHIFT) |
                      ((val[index]   & 0xff) << LO_BYTE_SHIFT));
    }

    
View Code

2、

以上是关于java String源码浅出的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 笔记 从源码深入浅出集合框架

Java线程池详解

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器