1、通过断点调试,发现buffer.insert(5,buffer) 这个方法的插入逻辑如下图
2,关键点在于buffer1.insert(5,buffer2)是取一个字符再插入一个字符,当buffer1和buffer2不一样,这个自然不会有问题。
当buffer1==buffer2,后面取的字符可能是前面刚插入进去的,而不是原始需要插入的字符。
它只记字符索引值,这样就会出错。
3、看来源码里面还是有bug的。。。应该先把buffer2的字符放到temp里面,谁能想到,经过这么长的迭代,
会有value==s?关键位置源码
for (int i=start; i<end; i++)
value[dstOffset++] = s.charAt(i);
//AbstractStringBuilder的1115-1116行。
|