下面是java源码replace方法的截图我对该方法的实现有疑问:为什么不直接用newChar取代buffer中的oldChar,在没有进行System.arraycopy()之前即便使用了System.arraycopy(),为什么不是System.arraycopy(buffer,_offset,buffer,0_count)
2 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
buffer
是原来字符串的内部数组,你直接取代的话,原来的字符串不就也被修改了吗?!
自己拷贝自己?不明白你的意思是什么!这里用arraycopy
是为了快速创建一个内容和原来的buffer
一样的新数组,自己拷贝自己最后得到的还是同一个数组,有什么意义
绝地无双
TA贡献1946条经验 获得超4个赞
1.因为java的字符串是不可改变的,replace会返回一个新的字符串对象,原来的字符串没有改变,如果直接newChar替换oldChar原来字符串内的char数组元素也被改变了
2.同理,为了保证字符串对象的值不改变,每个字符串变量内都要引用一个独立的char数组,而不能出现不同字符串引用同一个char数组的情况。
添加回答
举报
0/150
提交
取消