java 如何引用传递
在Java中,所有方法参数本质上都是值传递(pass by value),但可以通过特定方式模拟引用传递的效果。以下是实现类似引用传递的几种方法:
使用对象引用
通过传递对象而非基本类型,方法内部修改对象状态会影响原始对象,因为传递的是对象引用的副本(指向同一对象)。

class Wrapper {
int value;
}
void modifyObject(Wrapper wrapper) {
wrapper.value = 100; // 修改会影响原始对象
}
// 调用
Wrapper w = new Wrapper();
modifyObject(w);
System.out.println(w.value); // 输出100
使用数组
数组是对象类型,传递数组引用可达到类似效果:

void modifyArray(int[] arr) {
arr[0] = 99;
}
// 调用
int[] array = {1};
modifyArray(array);
System.out.println(array[0]); // 输出99
使用单元素集合
集合类如ArrayList也能实现类似效果:
void modifyList(List<Integer> list) {
list.set(0, 88);
}
// 调用
List<Integer> list = new ArrayList<>();
list.add(1);
modifyList(list);
System.out.println(list.get(0)); // 输出88
自定义可变包装类
针对基本类型,可创建自定义包装类:
class IntHolder {
public int value;
IntHolder(int v) { this.value = v; }
}
void modifyValue(IntHolder holder) {
holder.value = 77;
}
// 调用
IntHolder holder = new IntHolder(1);
modifyValue(holder);
System.out.println(holder.value); // 输出77
注意事项
- Java严格遵循值传递规则,即使传递对象引用也是传递引用的副本。
- 基本类型(int, double等)无法直接实现引用传递,必须通过包装类或容器间接实现。
- 方法内部重新赋值对象引用(如
obj = new Object())不会影响原始引用。






