java对象如何引用
对象引用的基本概念
在Java中,对象引用是指向对象实例的指针或句柄。对象本身存储在堆内存中,而引用变量存储在栈内存中,持有对象在堆中的地址。
创建对象引用
通过new关键字实例化对象时,会返回该对象的引用。可以将这个引用赋值给变量:
MyClass obj = new MyClass();
这里obj是引用变量,指向新创建的MyClass实例。
引用赋值
可以将一个引用赋值给另一个同类型的引用变量,此时两个引用指向同一个对象:
MyClass obj1 = new MyClass();
MyClass obj2 = obj1; // obj2现在指向obj1引用的对象
引用传递
Java中方法参数传递本质上是值传递,但对于对象引用来说,传递的是引用的副本(即地址值的拷贝):
void modifyObject(MyClass param) {
param.setValue(10); // 修改会影响原始对象
}
MyClass obj = new MyClass();
modifyObject(obj);
引用比较
使用==运算符比较引用时,比较的是内存地址是否相同:
MyClass obj1 = new MyClass();
MyClass obj2 = obj1;
System.out.println(obj1 == obj2); // 输出true
空引用
引用可以赋值为null,表示不指向任何对象:
MyClass obj = null;
尝试通过空引用访问成员会导致NullPointerException。
强引用
默认的引用类型,只要强引用存在,对象就不会被垃圾回收:
MyClass strongRef = new MyClass();
软引用(SoftReference)
内存不足时可能被回收的引用:
SoftReference<MyClass> softRef = new SoftReference<>(new MyClass());
弱引用(WeakReference)
无论内存是否充足,都可能被回收的引用:
WeakReference<MyClass> weakRef = new WeakReference<>(new MyClass());
虚引用(PhantomReference)
用于跟踪对象被回收的状态,必须与引用队列配合使用:
ReferenceQueue<MyClass> queue = new ReferenceQueue<>();
PhantomReference<MyClass> phantomRef = new PhantomReference<>(new MyClass(), queue);
引用队列(ReferenceQueue)
与软/弱/虚引用配合使用,可以监控引用对象的回收状态:

ReferenceQueue<MyClass> queue = new ReferenceQueue<>();
WeakReference<MyClass> ref = new WeakReference<>(new MyClass(), queue);






