java源码 replace方法

jiel 2015年12月12日提问
-1

下面是java源码replace方法的截图

我对该方法的实现有疑问:

  1. 为什么不直接用newChar取代buffer中的oldChar,在没有进行System.arraycopy()之前

  2. 即便使用了System.arraycopy(),为什么不是System.arraycopy(buffer,_offset,buffer,0_count)

2个回答

0

已采纳

1.因为java的字符串是不可改变的,replace会返回一个新的字符串对象,原来的字符串没有改变,如果直接newChar替换oldChar原来字符串内的char数组元素也被改变了
2.同理,为了保证字符串对象的值不改变,每个字符串变量内都要引用一个独立的char数组,而不能出现不同字符串引用同一个char数组的情况。

0

buffer是原来字符串的内部数组,你直接取代的话,原来的字符串不就也被修改了吗?!

自己拷贝自己?不明白你的意思是什么!这里用arraycopy是为了快速创建一个内容和原来的buffer一样的新数组,自己拷贝自己最后得到的还是同一个数组,有什么意义

撰写答案

SegmentFault

一起探索更多未知

下载 App