1. 为什么Java的值传递总让人困惑
第一次接触Java参数传递机制时,我也曾被各种"引用传递"的说法绕得晕头转向。直到在调试器里亲眼看到对象引用被复制的过程,才真正理解这个看似简单却容易误解的概念。今天我们就用最直白的方式,拆解Java参数传递的本质。
先看个典型误区:很多初学者认为基本类型是值传递,对象类型是引用传递。这种二分法其实埋下了理解偏差的种子。实际上,Java中所有参数传递都是值传递(pass by value),只不过对象类型的"值"比较特殊——它传递的是对象引用的副本。
关键理解:当你说"传递对象"时,实际上传递的是对象引用的拷贝,而不是对象本身。这个细微差别决定了方法内外变量行为的不同。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 值传递的本质解析
2.1 基本类型的值传递验证
用int类型做个简单实验:
java复制void modify(int x) {
x = 20;
System.out.println("方法内x: " + x); // 输出20
}
public static void main(String[] args) {
int a = 10;
modify(a);
System.out.println("方法外a: " + a); // 输出10
}
这个过程就像复印身份证:你把身份证复印件(参数值)交给别人,对方在复印件上涂改,不会影响你手中的原件。
2.2 对象类型的"引用副本"现象
再看对象类型的例子:
java复制class Person {
String name;
Person(String name) { this.name = name; }
}
void modifyObject(Person p) {
p.name = "李四";
p = new Person("王五"); // 关键点!
}
public static void main(String[] args) {
Person person = new Person("张三");
modifyObject(person);
System.out.println(person.name); // 输出什么?
}
