解决java的string的传值和传地址问题

解决java的string的传值和传地址问题

ID:20463549

大小:164.00 KB

页数:13页

时间:2018-10-09

解决java的string的传值和传地址问题_第1页
解决java的string的传值和传地址问题_第2页
解决java的string的传值和传地址问题_第3页
解决java的string的传值和传地址问题_第4页
解决java的string的传值和传地址问题_第5页
资源描述:

《解决java的string的传值和传地址问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、(浪曦分享)解决JAVA的String的传值和传地址问题关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变。Java中String的传值/传地址问题:例子引入:1packagecom.cnblog.GDUTtiantian.String;23/**4*@authorGDUTtiantian5*/6publicclassJavaString{78publicstaticvoidchange(Stringname){9//修改name的值1

2、0name="ChangedName";11}121314publicstaticvoidmain(String[]args){15Stringname="GDUTtiantian";1617change(name);1819System.out.println(name);2021}2223}运行结果:1GDUTtiantian为什么结果不是"ChangedName"呢?String类的底层实现是用一个字符数组去实现的,就像Integer类,底层也是对int进行封装[装箱和拆箱]。看String类的修饰部分(源码):1publi

3、cfinalclassString2implementsjava.io.Serializable,Comparable,CharSequence{3/**Thevalueisusedforcharacterstorage.*/4privatefinalcharvalue[];注意,String类加了final关键字,所以不能被继承。第4行是字符串底层的存储结构:字符数组。String的内容不能被动态地修改,因为底层是字符数组实现的,数组的大小是在初始化时决定的;如果可以修改,新的字符串长度比原来数组大,那么就会造成

4、数组越界。String和StringBuffer的比较:1packagecom.cnblog.GDUTtiantian.String;23/**4*@authorGDUTtiantian5*6*String,StringBuffer在传参过程中的哈希值比较7*/8publicclassJavaString4{91011publicstaticvoidchange(Stringstr){12System.out.println("形参的哈希值:"+str.hashCode());1314str="newString";//修改了形参

5、的值15System.out.println("修改后:"+str.hashCode());16}1718publicstaticvoidchange(StringBuffersb){19System.out.println("形参的哈希值:"+sb.hashCode());20sb.append("newStringBuffer");//修改了形参的值21System.out.println("修改后:"+sb.hashCode());22}232425publicstaticvoidmain(String[]args){26S

6、tringstr=newString("GDUTtiantian");27StringBuffersb=newStringBuffer("tiantian");2829System.out.println("修改前:"+str.hashCode());30change(str);3132System.out.println("----------------------------");3334System.out.println("修改前:"+sb.hashCode());35change(sb);36}3738}运行结

7、果:1修改前:-5014512642形参的哈希值:-5014512643修改后:-59570641545----------------------------67修改前:10367820958形参的哈希值:10367820959修改后:1036782095实参String变量传给形参,是传一个地址过去,并没有重新创建一个对象,StringBuffer变量也是这么做;但是,在修改形参的值后,String变量的哈希值发生了改变,StringBuffer变量的哈希没有发生改变,即String变量指向了一个新建的对象。看看JDK中Str

8、ing类的一段源码(String类的一个构造方法):1/**2*Allocatesanew{@codeString}thatcontainscharactersfromasubarray3*ofthe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。