java如何传引用
在Java中,所有的参数传递都是按值传递(pass by value),但可以通过传递对象的引用来模拟传引用(pass by reference)的效果。以下是几种常见的方法:
传递对象引用
Java中对象变量存储的是对象的引用(内存地址),传递对象时实际上传递的是引用的副本。通过修改引用指向的对象内容,可以实现类似传引用的效果。
class MyObject {
int value;
}
public class Main {
static void modifyObject(MyObject obj) {
obj.value = 100; // 修改对象内容
}
public static void main(String[] args) {
MyObject obj = new MyObject();
obj.value = 50;
modifyObject(obj);
System.out.println(obj.value); // 输出100
}
}
使用数组
数组在Java中也是对象,传递数组时传递的是数组引用的副本,可以通过修改数组元素来达到传引用的效果。
public class Main {
static void modifyArray(int[] arr) {
arr[0] = 100; // 修改数组元素
}
public static void main(String[] args) {
int[] arr = {50};
modifyArray(arr);
System.out.println(arr[0]); // 输出100
}
}
使用包装类
虽然Java的包装类(如Integer、Double)是不可变的,但可以通过自定义可变包装类来模拟传引用。
class MutableInteger {
int value;
}
public class Main {
static void modifyWrapper(MutableInteger wrapper) {
wrapper.value = 100;
}
public static void main(String[] args) {
MutableInteger wrapper = new MutableInteger();
wrapper.value = 50;
modifyWrapper(wrapper);
System.out.println(wrapper.value); // 输出100
}
}
使用AtomicReference
Java并发包中的AtomicReference是一个可变引用类,可以用于传递和修改引用。

import java.util.concurrent.atomic.AtomicReference;
public class Main {
static void modifyAtomicReference(AtomicReference<Integer> ref) {
ref.set(100);
}
public static void main(String[] args) {
AtomicReference<Integer> ref = new AtomicReference<>(50);
modifyAtomicReference(ref);
System.out.println(ref.get()); // 输出100
}
}
注意事项
- Java中基本类型(如
int、double)是严格按值传递的,无法直接传引用。 - 对象引用传递的是引用的副本,因此在方法内重新赋值引用不会影响原始引用。
- 如果需要修改基本类型的值,可以将其封装为对象或使用数组。






