java 如何传址
在 Java 中,所有的参数传递都是按值传递(pass by value),但可以通过传递对象的引用来实现类似“传址”的效果。以下是具体方法:
传递对象引用
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
}
}
使用数组
数组是对象,传递数组时传递的是数组的引用,可以通过数组修改元素。

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
}
}
使用包装类
对于基本类型,可以通过包装类(如 Integer、Double)实现类似传址的效果,但需要注意包装类是不可变的,需要通过其他方式修改值。
class MutableInt {
int value;
}
public class Main {
static void modifyValue(MutableInt wrapper) {
wrapper.value = 42;
}
public static void main(String[] args) {
MutableInt wrapper = new MutableInt();
wrapper.value = 10;
modifyValue(wrapper);
System.out.println(wrapper.value); // 输出 42
}
}
使用 Atomic 类
对于需要线程安全的场景,可以使用 AtomicInteger、AtomicReference 等原子类。
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
static void modifyAtomic(AtomicInteger atomic) {
atomic.set(200);
}
public static void main(String[] args) {
AtomicInteger atomicInt = new AtomicInteger(50);
modifyAtomic(atomicInt);
System.out.println(atomicInt.get()); // 输出 200
}
}
注意事项
- Java 中无法直接传递基本类型的地址(如 C 语言的
&操作符)。 - 传递对象引用时,不能修改引用本身(即让引用指向新对象),但可以修改对象的状态。
- 如果需要修改引用本身,可以通过返回新对象或使用容器类(如
AtomicReference)实现。






