龙猫12138 2017-05-10 12:08 采纳率: 0%
浏览 1092
已采纳

java,replace的源码为什么要写那么长?下有图和代码

图片说明
这里是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的意思,也没有看得起自己的意思:》)

  • 写回答

2条回答 默认 最新

  • 关注

    个人理解,仅供参考:
    1、java源码的第一个while,应该是为了在“没有字符匹配”场景下提高效率,直接返回自身
    2、java源码最后调用这个包私有的构造器String(char[] value, boolean share),也可以提高效率,不用再拷贝一遍char数组。
    3、你的版本,首先调toCharArray()方法 会将整个数组拷贝一遍。
    4、最后调用的单参数构造器String(char value[]),又会将整个数组拷贝一遍。

    所以,在无匹配字符,以及长字符串下,应该是源码效率高。

    另,java SE源码有随jdk发布,在jdk的安装目录下,有个名叫src的zip包。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题