java如何传递地址
在Java中,对象参数的传递本质上是按值传递(传递引用的副本),但可以通过特定方式模拟类似“传递地址”的效果。以下是几种常见方法:
使用对象引用
Java中对象变量存储的是对象的引用(类似指针)。通过传递对象引用,可以修改对象内部状态:
class MyClass {
int value;
}
void modifyObject(MyClass obj) {
obj.value = 100; // 修改对象内部状态
}
// 调用示例
MyClass obj = new MyClass();
modifyObject(obj); // obj.value将被修改为100
使用数组
数组也是对象,传递数组引用可以修改其内容:
void modifyArray(int[] arr) {
arr[0] = 999;
}
// 调用示例
int[] myArray = {1, 2, 3};
modifyArray(myArray); // myArray[0]变为999
使用包装类(有限模拟)
对于基本类型,可以通过包装类实现类似效果:
void modifyInteger(IntegerWrapper iw) {
iw.value += 10;
}
class IntegerWrapper {
int value;
IntegerWrapper(int v) { this.value = v; }
}
// 调用示例
IntegerWrapper iw = new IntegerWrapper(5);
modifyInteger(iw); // iw.value变为15
使用AtomicReference(线程安全方案)
对于需要线程安全的场景,可以使用java.util.concurrent.atomic包中的原子引用类:

import java.util.concurrent.atomic.AtomicReference;
void modifyAtomic(AtomicReference<String> ref) {
ref.set("new value");
}
// 调用示例
AtomicReference<String> atomicRef = new AtomicReference<>("old");
modifyAtomic(atomicRef); // 值变为"new value"
注意事项
- Java没有真正的指针或地址传递,所有参数传递都是值传递(包括引用类型传递的是引用副本)
- 基本类型(int, double等)无法直接修改原始值,必须通过包装类或数组间接实现
- 方法内部对引用变量重新赋值(如
obj = new MyClass())不会影响原始引用






