首页 / JAVA / Java习题-03值传递机制
Java习题-03值传递机制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java习题-03值传递机制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1118字,纯文字阅读大概需要2分钟。
内容图文
/** * @author : TSCCG * @date: 2021/4/27 * 值传递机制 */ public class StringTest { String str = new String("good"); char[] aw = { ‘t‘, ‘e‘, ‘s‘, ‘t‘ }; publicvoid change(String atr, char[] ah) { atr = "bad"; ah[0] = ‘b‘; } publicstaticvoid main(String[] args) { StringTest st = new StringTest(); System.out.println("str:" + st.str); System.out.println(st.aw); st.change(st.str, st.aw); System.out.println("str:" + st.str); System.out.println(st.aw); } }
运行结果:
str:good
test
str:good
best
1.思考问题:
为什么String定义的对象str的值没有发生改变,而数组aw却改变了呢?
2.代码分析
st.change(st.str, st.aw);
这行代码调用了change()方法,拷贝了实参的地址到该方法中的形参上面,如实参str就将指向"good"的存储单元地址传入形参atr中,使得存在两个引用指向同一块存储单元。
public void change(String atr, char[] ah) { atr = "bad"; ah[0] = ‘b‘; }
1.该代码块为change()方法的源码,其中atr = "bad"; 是赋值语句,使得编译器重新开辟一块存着"bad"的存储单元,并将形参atr指向该存储单元。
但String不可变,实参str此时仍指向"good",这就使得str的输出结果仍为"good"。
2.ah[0] = ‘b‘; 该语句使用下标赋值,不会创建新的对象,故结果改变
3.解决方法
在change()方法中将形参地址赋给实参
public void change(String atr, char[] ah) { atr = "bad"; // 这里将形参的地址赋给实参 str = atr; ah[0] = ‘b‘; }
运行结果:
str:good
test
str:bad
best
原文:https://www.cnblogs.com/TSCCG/p/14710974.html
内容总结
以上是互联网集市为您收集整理的Java习题-03值传递机制全部内容,希望文章能够帮你解决Java习题-03值传递机制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。