java方法中只有值传递,没有引用传递
public class Example {
String testString = new String("good");
char[] testCharArray = {'a','b','c'};
public static void main(String[] args){
Example ex = new Example();
ex.change(ex.testString,ex.testCharArray);
System.out.println(ex.testString);
System.out.println(ex.testCharArray);
}
public void change(String testString,char[] testCharArray){
testString = "hhhhhh";
testCharArray[0] = 'w';
}
}
这段代码最后输出的是什么?
考虑之后给出你的答案。
good
wbc
首先要明白的java的方法传递的究竟是什么?
对于基本类型,传递的是基本类型的值,而对于引用类型传递的是地址。
所以无论是什么,传递的都是值,因为你可以把地址理解成9x0000这种,也是一个值。
所以传递的都是值。
那么方法中什么时候会改变原来的值,什么时候不会呢?
1、只要是基本类型,传递的是值,这个值是复制了一份出来的,所以怎么都不会改变。
2、引用类型,传递的是地址,如果这个地址变了,那么原来的值肯定不变。
3、引用类型,传递的是地址,如果地址没变,而改变了地址对应的对象的属性,那么久会改变原来的值。
如果还听不明白,那么简单的说,只要在方法里面把传进来的对象重新赋值一个new的对象,那么原来是不变得。
如同方法中的string,重新赋值了一个字符串,这个时候地址以及改变了,所以原来那个不变。
而char数组,没有重新复制一个新的char数组,而是把char数组中的元素改变了,那就会改变原来的值。
对于内存的分析,下面这篇博客特别清楚,我就不多说了。
搞懂这个真的很重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?