java 如何传引用
在Java中,所有参数传递本质上是按值传递,但可以通过特定方式模拟传递引用的效果。以下是几种常见方法:
使用对象传递
通过传递对象(如数组、集合或自定义类实例),可以间接修改对象内部状态。由于对象变量存储的是对象的引用(地址值),方法内对对象属性的修改会反映到原始对象上。

class Wrapper {
int value;
}
public class Main {
static void modifyValue(Wrapper wrapper) {
wrapper.value = 100;
}
public static void main(String[] args) {
Wrapper w = new Wrapper();
w.value = 50;
modifyValue(w);
System.out.println(w.value); // 输出100
}
}
使用数组
数组作为对象的一种,传递时同样传递引用值,方法内对数组元素的修改会影响原数组。

public class Main {
static void modifyArray(int[] arr) {
arr[0] = 99;
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
modifyArray(array);
System.out.println(array[0]); // 输出99
}
}
使用Atomic类型
对于基本类型,可以使用AtomicInteger、AtomicReference等原子类包装,通过引用传递实现修改。
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
static void increment(AtomicInteger num) {
num.incrementAndGet();
}
public static void main(String[] args) {
AtomicInteger n = new AtomicInteger(10);
increment(n);
System.out.println(n.get()); // 输出11
}
}
单元素数组技巧
对于基本类型,可以将其放入单元素数组,通过数组引用传递实现修改。
public class Main {
static void changeValue(int[] holder) {
holder[0] = 200;
}
public static void main(String[] args) {
int[] holder = {100};
changeValue(holder);
System.out.println(holder[0]); // 输出200
}
}
注意:Java没有C++风格的直接引用传递(即&操作符),所有方法参数传递都是值的副本。对于对象类型,传递的是对象引用的副本,因此可以通过该副本访问并修改原始对象。






