java String源碼淺出
阿新 • • 發佈:2019-01-10
圖片 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雙字節編碼 returnView CodeStringUTF16.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雙字節編碼,字符數等於字節除以2public 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)); }
2、
java String源碼淺出