protected char buffer[];
......
@Override
public String toString() {
// Create a copy, don't share the array
String value = new String(this.buffer, 0, count);
if (this.buffer.length <= 1024 * 8) {
bufferLocal.set(new SoftReference<char[]>(this.buffer));
}
this.buffer = null;
return value;
}
这段代码正常执行没什么问题,(前提是调用了toString()后就结束对此对象的使用)但是如果用IDE debug的时候监视当前对象,IDE就会调用toString(),会执行this.buffer = null,当前对象状态就悄无声息的被修改了,我被它坑的调查了半个小时,不知道有没有人曾经跟我同样遭遇,看来还是最好不要在toString修改对象状态,还是增加一个如下方法吧
public String toStringAndClose() {
// Create a copy, don't share the array
String value = new String(buffer, 0, count);
if (buffer.length <= 1024 * 8) {
bufferLocal.set(new SoftReference<char[]>(buffer));
}
buffer = null;
return value;
}
@Override
public String toString() {
// Create a copy, don't share the array
return new String(buffer, 0, count);
}