Java只有值传递,没有引用传递;形参得到的是实参的副本,基本类型复制数值,引用类型复制地址值,修改形参指向不影响实参,但修改对象内容会影响实参。

Java 中只有值传递,没有引用传递。面试时抓住“形参得到的是实参的副本”这个核心,就能清晰流利讲清楚。
先说结论,再破常见误解
Java 所有参数传递都是值传递——包括基本类型和引用类型。所谓“引用传递”的说法是错的,本质是“引用的值”被传递了。比如 String、ArrayList、自定义对象等,传进去的不是对象本身,而是指向对象的引用变量的值(即内存地址的拷贝)。
用两个典型例子对比说明
基本类型:传的是数值副本,修改形参不影响实参。
void change(int x) { x = 100; }
int a = 10;
change(a);
// a 还是 10
引用类型:传的是引用变量的值(地址副本),形参和实参指向同一对象,所以能改对象内容;但若让形参指向新对象,实参不受影响。
立即学习“Java免费学习笔记(深入)”;
void changeList(List<String> list) {
list.add("new"); // ✅ 对象内容变了,原 list 也能看到
list = new ArrayList<>(); // ❌ 实参 list 仍指向原对象
}
一句话总结关键逻辑
- Java 方法调用时,JVM 为每个形参分配新变量,并把实参的值复制过去
- 基本类型复制的是数值;引用类型复制的是地址值(不是对象,也不是“引用本身”的概念)
- 因此:改形参变量的指向(
=赋值)不影响实参;改形参所指对象的内容(.add()、.set()等)会影响实参看到的结果
面试加分点:顺带提一句“为什么设计成这样”
值传递语义更简单、安全,避免方法内部意外篡改调用方的变量绑定关系。Java 的设计者明确强调过:“Java is pass-by-value, always.”


















