《JDK源碼閱讀一》--AbstractStringBuilder --reverse方法
今天發現一段很有趣的代碼,這是AbstractStringBuilder 的reverse方法源碼,可以按照字符從中心位置進行翻轉
public AbstractStringBuilder reverse() {
// 是否含有代理字符
boolean hasSurrogates = false;
// 定義一個變量表示長度減一
int n = count - 1;
// j初始化,長度減2再算數右移一位,可看做 int j = (count - 2)/2
// 偶數長度,遍歷一半次數,對調替換
// 奇數長度,遍歷一半次數減一,對調替換,中間不動
for (int j = (n-1) >> 1; j >= 0; j--) {
int k = n - j;
char cj = value[j];
char ck = value[k];
value[j] = ck;
value[k] = cj;
if (Character.isSurrogate(cj) ||
Character.isSurrogate(ck)) {
hasSurrogates = true;
}
}
if (hasSurrogates) {
reverseAllValidSurrogatePairs();
}
return this;
}

浙公網安備 33010602011771號