请教各位高手:
字符串初始化后不能修改,字符串缓冲区支持可变的字符串
调用replace()方法返回一个新的字符串是否可以理解为:
字符串等效一个字节数组
字节数组被复制到缓冲区
然后replace()方法修改字节数组
然后返回一个新的字符串
它们内存中的对应情况是什么样的新手没分,不好意思
谢谢先,祝大家新年快乐

解决方案 »

  1.   

    String类内部维护着一个char[],它其中的一个replace()方法实现如下:
     public String replace(char oldChar, char newChar) {
    if (oldChar != newChar) {
        int len = count;
        int i = -1;
        char[] val = value; /* avoid getfield opcode */
        int off = offset;   /* avoid getfield opcode */     while (++i < len) {
    if (val[off + i] == oldChar) {
        break;
    }
        }
        if (i < len) {
    char buf[] = new char[len];
    for (int j = 0 ; j < i ; j++) {
        buf[j] = val[off+j];
    }
    while (i < len) {
        char c = val[off + i];
        buf[i] = (c == oldChar) ? newChar : c;
        i++;
    }
    return new String(0, len, buf);
        }
    }
    return this;
        }
    这样看的可以很清楚!
      

  2.   

    如果你的新字符和老的字符相等,或者没有发现你要替换的字符,就不会创建新的字符串,直接返回this