| public final class StringBuffer extends AbstractStringBuilder implements Serializable, CharSequence { |
| |
| public StringBuffer() { |
| super(16); |
| } |
| |
| public synchronized StringBuffer append(String str) { |
| super.append(str); |
| return this; |
| } |
| |
| public synchronized String toString() { |
| return new String(value, 0, count); |
| } |
| |
| |
| } |
| public final class StringBuilder extends AbstractStringBuilder |
| implements java.io.Serializable, CharSequence |
| { |
| |
| |
| public StringBuilder append(String str) { |
| super.append(str); |
| return this; |
| } |
| |
| public String toString() { |
| |
| return new String(value, 0, count); |
| } |
| |
| |
| } |
| |
| public String toString() { |
| return new String(value, 0, count); |
| } |
| public StringBuilder append(String str) { |
| |
| super.append(str); |
| return this; |
| } |
| public AbstractStringBuilder append(String str) { |
| if (str == null) |
| |
| return appendNull(); |
| int len = str.length(); |
| |
| ensureCapacityInternal(count + len); |
| str.getChars(0, len, value, count); |
| count += len; |
| return this; |
| } |
| |
| private AbstractStringBuilder appendNull() { |
| int c = count; |
| ensureCapacityInternal(c + 4); |
| final char[] value = this.value; |
| value[c++] = 'n'; |
| value[c++] = 'u'; |
| value[c++] = 'l'; |
| value[c++] = 'l'; |
| count = c; |
| return this; |
| } |
| |
| private void ensureCapacityInternal(int minimumCapacity) { |
| if (minimumCapacity - value.length > 0) |
| |
| expandCapacity(minimumCapacity); |
| } |
| |
| void expandCapacity(int minimumCapacity) { |
| |
| int newCapacity = value.length * 2 + 2; |
| |
| if (newCapacity - minimumCapacity < 0) |
| newCapacity = minimumCapacity; |
| |
| if (newCapacity < 0) { |
| if (minimumCapacity < 0) |
| throw new OutOfMemoryError(); |
| newCapacity = Integer.MAX_VALUE; |
| } |
| |
| value = Arrays.copyOf(value, newCapacity); |
| } |
| public StringBuilder reverse() { |
| |
| super.reverse(); |
| return this; |
| } |
| public AbstractStringBuilder reverse() { |
| boolean hasSurrogates = false; |
| |
| int n = count - 1; |
| |
| 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; |
| } |
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/18301348
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步