Java引用类型

1. 前序

在了解引用的分类之前先了解一下对象和对象引用之间的区别。

1.1 对象

        对象是类的实例。当使用new关键字创建类的实例时,jvm 会在堆内存中给该对象分配内存空间。
        对象的特性:
        ① java对象普遍存储在堆内存中(其他情况,在经过【即时编译器】的【逃逸分析】技术分析之后,如果 能够确定一个对象不会逃逸到线程之外,那么就可以在 虚拟机栈 上为这个对象分配内存,这被称为【栈上分配】)。
        ② java对象 包含实例变量(非静态字段)和方法。

举例,假设有一个名为 Person的类,那么创建一个对象的行为可以是:

Person person = new Person();

在这行代码中,new Person() 实际上就是创建了一个 Person类型的对象。

1.2 对象引用

        对象引用 就是一个变量,它存储的是 Java对象在堆内存中的地址。当你声明了一个变量用来存储对象时,你创建的就是一个引用,这个引用指向了堆内存中的对象,你可以通过这个引用来访问对象。
        对象引用的特性:
        ① 对象引用可以存储在堆内存,也可以存储在虚拟机栈内存中(作为局部变量存储时)。
        ② 对象引用指向堆内存中的一个对象实例。
        ③ 如果改变指向,则就指向堆内存中的另一个不同的对象。
        ④ 如果引用被设置为 null,它就不再指向任何对象,这样做可以让原本引用的对象成为垃圾回收的候选对象。

        继续上面的例子,变量 person 就是一个对象引用,它指向 new Person() 创建的 Person对象实例。概括来说,对象时具体的数据实体,而对象引用相当于指针或者句柄,指向这些实体数据。

2. 引用

2.1 引用的分类

Q:在Java中,对象的引用分为了四个类别:强引用、软引用、弱引用、虚引用。为什么要分这么多类型的引用?

A:这些引用类型提供了不同的生命周期和垃圾收集行为,Java虚拟机在进行垃圾回收时,可以根据应用场景的需要选择性的回收对象。

2.2 强引用

举例

Person person 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值