《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;
}

 

posted @ 2019-07-16 10:39  草莓罐头  阅读(348)  评论(0编辑  收藏  举报