Java习题-03值传递机制
2021/4/27 22:25:56
本文主要是介绍Java习题-03值传递机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/** * @author: TSCCG * @date: 2021/4/27 * 值传递机制 */ public class StringTest { String str = new String("good"); char[] aw = { 't', 'e', 's', 't' }; public void change(String atr, char[] ah) { atr = "bad"; ah[0] = 'b'; } public static void 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
这篇关于Java习题-03值传递机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门