java只有值传递:基本类型传数值副本,修改不影响原变量;引用类型传地址副本,可修改对象内容但不能改变原引用指向。

Java 中只有值传递,没有引用传递。所谓“值”,对基本类型是数据本身,对引用类型则是对象的内存地址——传的始终是这个“值”的副本。
基本类型:传数值副本,改了也不影响外面
比如 int a = 5,变量 a 直接存数字 5 在栈里。调用方法时,JVM 把 5 复制一份给形参,两个变量各自独立。方法内把形参改成 10,只动了副本,a 还是 5。
- 常见表现:swap(int x, int y) 无法真正交换外部两个变量
- 关键点:基本类型变量和它的副本,都在栈中,互不相干
- 所有基本类型(int、boolean、char 等)都遵循这一规则
引用类型:传地址副本,能改内容但不能换指向
比如 List
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 能影响外部:list.add("a")、obj.setName("张三") —— 操作的是堆里的同一份数据
- 不影响外部:list = new ArrayList()、obj = null —— 只让形参副本指向新地址,原变量仍指向旧对象
- String、Integer 等不可变类也一样:看似“修改”,实为新建对象并让副本指向它
怎么快速判断外部会不会变
看操作目标是什么:
- 调用了对象的方法修改其内部状态(如 set、add、put)→ 外部能感知变化
- 对形参本身重新赋值(=、new、null)→ 外部完全没反应
- 验证小技巧:在方法末尾打印实参对象的 hashCode(),若与外部一致,说明指向没变
为什么说 Java 没有引用传递
真正的引用传递(如 C++ 的 void f(Person& p))允许在方法内写 p = new Person() 直接改变外部变量的指向。Java 做不到——这是本质区别,也是设计上的安全机制。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










