在 Java 中,参数传递方式只有一种:按值传递(Pass by Value)。这也是初学者最容易混淆的地方。下面从原理、常见类型和示例来解释。
Java 中无论是基本类型还是对象引用,都是“值传递”
public static void change(int x) {
x = 10;
}
public static void main(String[] args) {
int a = 5;
change(a);
System.out.println(a); // 输出 5
}
a 的值是 5change(a) 时,把 5 的副本传给 xx,不影响 a✅ 基本类型:形参改变不影响实参
class Person {
int age;
}
public static void change(Person p) {
p.age = 20;
}
public static void main(String[] args) {
Person person = new Person();
person.age = 10;
change(person);
System.out.println(person.age); // 输出 20
}
person 存的是对象地址pp 和 person 指向同一个对象p 修改对象内容,会影响原对象✅ 引用类型:修改对象内容会影响原对象
public static void change(Person p) {
p = new Person(); // 只改变 p 的指向
p.age = 30;
}
public static void main(String[] args) {
Person person = new Person();
person.age = 10;
change(person);
System.out.println(person.age); // 输出 10
}
p = new Person() 只是让 p 指向新对象person 仍然指向原对象p 消失❌ 重新赋值引用不影响原引用
public static void modify(int[] arr) {
arr[0] = 100;
}
public static void main(String[] args) {
int[] a = {1, 2, 3};
modify(a);
System.out.println(a[0]); // 输出 100
}
✅ 数组也是引用类型,规则相同
| 参数类型 | 传递内容 | 方法内修改是否影响外部 |
|---|---|---|
| 基本类型 | 值副本 | ❌ 不影响 |
| 引用类型 | 引用副本 | ✅ 改对象内容会影响 |
| 引用类型 | 引用副本 | ❌ 重新指向新对象不影响 |
Java 只有值传递:基本类型传值,引用类型传“地址的值”
如果你愿意,我也可以结合 面试常问点 或 画图说明内存模型 来进一步解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。