函数toUpperCase 、toUpperCase实现原理
String.toUpperCase -> Character.toUpperCaseEx ->CharacterData.of().toUpperCaseEx
static final CharacterData of(int ch) {
if (ch >>> 8 == 0) {
return CharacterDataLatin1.instance;
} else {
switch(ch >>> 16) {
case(0):
return CharacterData00.instance;
case(1):
return CharacterData01.instance;
case(2):
return CharacterData02.instance;
case(14):
return CharacterData0E.instance;
case(15):
case(16):
return CharacterDataPrivateUse.instance;
default:
return CharacterDataUndefined.instance;
}
}
}
int toUpperCase(int ch) {
int mapChar = ch;
int val = getProperties(ch);
if ((val & 0x00010000) != 0) {
if ((val & 0x07FC0000) != 0x07FC0000) {
int offset = val << 5 >> (5+18);
mapChar = ch - offset;
} else if (ch == 0x00B5) {
mapChar = 0x039C;
}
}
return mapChar;
}