码迷,mamicode.com
首页 > 编程语言 > 详细

java String源码浅出

时间:2019-01-10 18:24:01      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:位置   etc   exce   cli   utf-16   判断   eve   字符串   isp   

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源码浅出

标签:位置   etc   exce   cli   utf-16   判断   eve   字符串   isp   

原文地址:https://www.cnblogs.com/natian-ws/p/10251556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!