这里是replace的源码,我在看别人帖子的时候看见了,除了第一个if和最后一个while我大概明白之外,其他的if、while、for不明白有什么用处,所以就自己写了一个,下面是代码
public class ReplaceTest
{
public String Replace (char oldchar , char newchar , String s)
{
if(oldchar!=newchar)
{
char [] val = s.toCharArray() ;
for(int i = 0 ; i < val.length ; i ++)
{
val[i] = (val[i]==oldchar)?newchar:val[i] ;
}
return new String(val) ;
}
return s ;
}
public ReplaceTest ()
{
System.out.println(Replace ('1','0',"111116")) ;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
new ReplaceTest () ;
}
}
我觉得我的也能用啊。。测试了几次也没有出错。所以1、那几个if、while、for有什么用呢?2、我这样写,错误的地方在哪里?
(求轻喷,没有看不起java的意思,也没有看得起自己的意思:》)

java,replace的源码为什么要写那么长?下有图和代码
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 十八年后又是 2017-05-11 14:43关注
个人理解,仅供参考:
1、java源码的第一个while,应该是为了在“没有字符匹配”场景下提高效率,直接返回自身
2、java源码最后调用这个包私有的构造器String(char[] value, boolean share),也可以提高效率,不用再拷贝一遍char数组。
3、你的版本,首先调toCharArray()方法 会将整个数组拷贝一遍。
4、最后调用的单参数构造器String(char value[]),又会将整个数组拷贝一遍。所以,在无匹配字符,以及长字符串下,应该是源码效率高。
另,java SE源码有随jdk发布,在jdk的安装目录下,有个名叫src的zip包。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用