1. 程式人生 > >java String源碼淺出

java String源碼淺出

圖片 rust hotspot exc byte isl gin sla lse

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源碼淺出