龙猫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条)

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号