Java中所有参数传递都是值传递,对象传参时传递的是引用的副本,副本与原引用指向同一对象,因此可修改对象状态,但无法改变原引用指向。

在Java中,理解对象引用与值传递是掌握方法调用和参数传递行为的关键。很多人容易混淆“引用传递”和“值传递”的概念,尤其是在处理对象时。实际上,Java中所有的参数传递都是值传递,无论是基本类型还是对象引用。
值传递意味着当调用一个方法时,实际传入的是变量的副本,而不是变量本身。对于基本数据类型(如int、double、boolean等),传递的就是该变量的值的拷贝;对于对象类型,传递的是对象引用的拷贝,而不是对象本身。
举个例子:假设有一个Person类:
class Person { String name; }
立即学习“Java免费学习笔记(深入)”;
然后在main方法中:
Person p = new Person();p.name = "Alice";change(p);System.out.println(p.name); // 输出可能是"Bob"
再看change方法:
void change(Person p) { p.name = "Bob";}
这里看似是“引用传递”,因为外部对象的属性被改变了。但其实,传进change方法的是引用p的一个副本,这个副本也指向同一个Person对象。因此通过副本引用也能修改对象的内容。
关键点在于:虽然引用指向的是堆中的同一个对象,但引用本身是按值传递的。也就是说,方法内部对引用变量的重新赋值不会影响外部的原始引用。
例如:
void reassign(Person p) { p = new Person(); p.name = "Charlie";}
调用reassign(p)后,原始的p仍然指向原来的对象,“Charlie”不会影响外部变量。因为在reassign中,p只是引用的副本,重新赋值让它指向新对象,但原引用不变。
有些人认为“对象是引用传递”,这是不准确的说法。Java没有真正的引用传递(如C++中的指针引用)。所谓“引用”只是存储对象地址的变量,而这个变量的值在传参时被复制了一次。
可以这样记:Java只传值,对象传的是引用的值。就像你把家庭住址写在纸上交给别人,别人按地址能改家里东西(对象内容),但如果你换了房子(重新new),别人手里的纸条不会自动更新。
基本上就这些。理解这一点,就能避免很多关于参数修改的困惑。
以上就是在Java中如何理解对象引用与值传递_引用值传递核心概念分享的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号