当前位置:首页 > Java

java如何引用

2026-03-19 11:53:15Java

引用类型

Java中的引用类型分为四种:强引用、软引用、弱引用和虚引用。每种引用类型在内存管理和垃圾回收中表现不同。

强引用是最常见的引用类型,只要强引用存在,对象就不会被垃圾回收器回收。例如:

Object obj = new Object();

软引用(SoftReference)在内存不足时会被垃圾回收器回收,适合用于实现内存敏感的缓存。示例:

SoftReference<Object> softRef = new SoftReference<>(new Object());

弱引用(WeakReference)在垃圾回收时无论内存是否充足都会被回收,常用于实现规范化映射。示例:

java如何引用

WeakReference<Object> weakRef = new WeakReference<>(new Object());

虚引用(PhantomReference)必须与引用队列联合使用,主要用于跟踪对象被垃圾回收的状态。示例:

ReferenceQueue<Object> queue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);

引用传递

Java中方法参数传递本质上是值传递,但对于对象类型传递的是引用的副本。修改引用指向的对象内容会影响原始对象,但重新赋值引用不会影响原始引用。

对象内容修改示例:

java如何引用

void modifyList(List<String> list) {
    list.add("new item");
}

引用重新赋值示例:

void reassignList(List<String> list) {
    list = new ArrayList<>();  // 不影响外部引用
}

引用比较

使用==比较引用时比较的是内存地址,使用equals()方法比较的是对象内容。字符串常量池的特殊情况需要注意:

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

s1 == s2;      // true,指向常量池同一对象
s1 == s3;      // false,不同对象
s1.equals(s3); // true,内容相同

引用与垃圾回收

理解引用对垃圾回收的影响很重要。强引用会阻止垃圾回收,而其他引用类型则允许对象在不同条件下被回收。使用引用队列可以跟踪对象回收状态:

ReferenceQueue<Object> rq = new ReferenceQueue<>();
WeakReference<Object> wr = new WeakReference<>(new Object(), rq);

System.gc();
Reference<?> ref = rq.poll();  // 获取被回收的引用

合理使用不同引用类型可以帮助优化内存使用,特别是在需要管理大型对象或缓存场景时。

标签: java
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…

vue实现java登录注册

vue实现java登录注册

实现 Vue 与 Java 后端的登录注册功能 前端 Vue 部分 安装必要的依赖(如 axios 用于 HTTP 请求): npm install axios 创建登录表单组件(Login.vue…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…

java js实现转盘抽奖

java js实现转盘抽奖

实现转盘抽奖的步骤 HTML结构 创建转盘抽奖的基本HTML结构,包括转盘区域和抽奖按钮。 <div id="wheel"> <canvas id="wheelCanvas"&…