下面是该方法的源码:
public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value; /* avoid getfield opcode */
// 先找到第一个要被替换的字符
while (++i < len) {
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];
//新建数组,将数组左侧不需要替换的复制进去
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
//剩下的需要被替换的替换,不需要的就还使用原来的
while (i < len) {
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(buf, true);
}
}
return this;
}
先找到要替换的字符,可以理解,如果没有要替换的,直接就可以返回了。
但是,在数组copy的环节,为何要写两个循环啊,直接一个循环,然后不该替换的字符放到新数组,需要替换的把替换的放进去,不久好了吗,为何要写的这么复杂?能提升性能吗?有没有大神能讲解一下,谢谢。
应该是为了减少c=oldChar的判断吧。确实得多思考才可以