java 如何引用传递
在 Java 中,所有参数传递本质上都是值传递(即传递的是变量的副本),但可以通过特定方式模拟引用传递的效果。以下是几种常见方法:
使用对象引用
Java 中对象变量存储的是对象的引用(内存地址),传递对象时实际传递的是引用的副本。由于副本和原引用指向同一对象,因此修改对象内容会影响原始对象。
class MyClass {
int value;
}
public void modifyObject(MyClass obj) {
obj.value = 100; // 修改会影响原始对象
}
使用数组
数组也是对象,传递数组参数时实际传递的是数组引用的副本,通过数组下标可以修改原始数组内容。
public void modifyArray(int[] arr) {
arr[0] = 99; // 修改会影响原始数组
}
使用包装类
虽然基本类型是值传递,但可以通过包装类(如 Integer、Double)模拟引用效果。注意包装类本身不可变,需通过重新赋值实现。
public void modifyWrapper(int[] holder) {
holder[0] = 200; // 使用数组元素模拟引用
}
使用自定义持有类
创建专门用于存储值的类,通过传递该类的实例实现引用效果。

class Holder<T> {
T value;
}
public void modifyHolder(Holder<Integer> holder) {
holder.value = 300; // 修改会影响原始值
}
注意事项
- 基本类型(
int、double等)严格按值传递,无法直接修改原始值。 - 字符串(
String)和包装类因不可变性,需特殊处理。 - 通过返回新对象并重新赋值也可实现类似效果,但不属于引用传递范畴。






