作者:专注自由近_515 | 来源:互联网 | 2024-11-18 10:12
Java语言提供了两种主要的数据类型:引用类型和原始类型(也称为基本类型)。这两种类型的特性和用途各不相同,本文将重点介绍引用类型及其分类。
引用类型和原始类型的行为差异显著,它们在内存管理和默认值等方面有所不同。引用类型用于表示对象,而原始类型则用于表示基本数据。
引用类型的主要特点包括:
- 存储方式:引用类型存储的是对象的引用,而不是对象本身。
- 默认值:对象引用的默认值为null,而原始类型的默认值与其类型相关,例如int的默认值为0。
- 封装类型:每个原始类型都有对应的封装类型,如Integer、Short、Long、Byte、Float、Double、Character等。
Java中有四种引用类型,按其引用强度从强到弱依次为:强引用、软引用、弱引用和虚引用。
1. 强引用 (StrongReference)
强引用是最常见的引用类型。只要强引用存在,垃圾回收器永远不会回收被引用的对象。即使内存不足,JVM也会直接抛出OutOfMemoryError,而不会尝试回收强引用对象。如果需要中断强引用与对象之间的联系,可以显式地将强引用赋值为null,这样JVM可以在适当的时候回收该对象。
2. 软引用 (SoftReference)
软引用用于描述一些非必需但仍有用的对象。在内存充足的情况下,软引用对象不会被回收;只有在内存不足时,系统才会回收软引用对象。如果回收了软引用对象后仍不足以满足内存需求,系统才会抛出内存溢出异常。软引用常用于实现缓存机制,如网页缓存和图片缓存。
自JDK1.2起,软引用由java.lang.ref.SoftReference类表示。
3. 弱引用 (WeakReference)
弱引用的引用强度比软引用更弱。无论内存是否充足,只要JVM开始进行垃圾回收,被弱引用关联的对象都会被回收。弱引用适用于那些不需要长时间保留的对象。
自JDK1.2起,弱引用由java.lang.ref.WeakReference类表示。
4. 虚引用 (PhantomReference)
虚引用是最弱的一种引用关系。如果一个对象仅持有虚引用,那么它与没有任何引用一样,随时可能被回收。虚引用必须与ReferenceQueue引用队列一起使用。通过查看PhantomReference类的源码,可以发现它只有一个构造函数和一个get()方法,而get()方法总是返回null,因此无法通过虚引用来获取对象。