引用和对象

本文介绍了Java中的引用和对象的概念,包括引用如何指向对象、引用的赋值、解引用操作,以及`==`和`Arrays.equals()`的区别。还详细讨论了`NullPointerException`异常的情况,当引用为null时进行解引用操作会导致此异常的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

所谓的引用或者对象,都是内存中数据的一种规定的组织方式。
引用提供给程序员一个间接操作对象的方式。
通过一个引用,管理着一个对象,引用指向对象
所谓的数组,其实准确的表述都是数组对象,还有我们直接学习过的字符串,其实是也是对象,只是被 String 类型的引用指向的对象。
只能引用指向对象,不能对象指向引用,也不能有引用指向引用,更不会对象指向对象。
引用同一时刻只能指向一个对象;对象同一时刻可以被多个引用指向。
引用可以不指向任何对象,就是对象为null的时候;
这时候就是空指针异常。

int[] a = null;

举例:

String s = "Hello World"; // 这里的 s 的类型是 String 类型的引用;该引用指向了一个String 类型的对象。
int[] a = { 1, 2, 3, 4, 5 }; // 这里的 a 的类型是 int[] 类型的引用;该引用指向了一个
元素类型是 int 的数组类型对象。

在这里插入图片描述

引用的赋值

引用的赋值运算,是让被赋值的引用指向该引用当前指向的对象。

int[] a = { 1, 2, 3, 4, 5 };
int[] b = null;
b = a; // 让 b 指向 a 目前指向的对象
int[] a = null; // a 不指向任何的对象
int[] b = { 1, 2, 3, 4, 5 };
b = a; // 让 b 指向 a 目前指向的对象
 // 由于 a 目前不指向任何的对象。所以 b 也不再指向任何的对象

在这里插入图片描述

在这里插入图片描述

引用的相等与不等比较,是比较两个引用是否指向同一个对象
在这里插入图片描述

int[] a = { 1, 2, 3, 4, 5 };
int[] b = { 1, 2, 3, 4, 5 };
a == b; // 由于 a 和 b 指向不同的对象,所以结果是 false
a != b; // 由于 a 和 b 指向不同的对象,所以结果是 true
b = a; // 让 b 指向 a 目前指向的对象
a == b; // 由于 a 和 b 指向相同的对象,所以结果是 true
a != b; // 由于 a 和 b 指向相同的对象,所以结果是 false

==和Arrays.equals()区别

“==”比较两个引用是否指向同一个对象

“equals()”比较字符串中所包含的内容是否相同。

解引用

对一个引用进行解引用,就是通过引用,找到该引用指向的对象。

int[] arr = { 1, 2, 3, 4 5 };
System.out.println(arr.length);

这里就是要对 arr 这个引用做解引用动作,也就是找到 arr 指向的数组对象,然后发布获取其长度的命令。
通过引用==[下标]==,进行解引用操作

int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(arr[0]);

引用类型支持的操作符

int[] a = { 1, 2, 3, 4, 5 };
int[] b = null; b = a; // 赋值操作符,支持
b == a; // 比较操作符,支持
b != a; // 比较操作符,支持
b[0]; // 解引用操作符,支持
b.length; // 解引用操作符,支持

NullPointerException 异常

通常被称为空指针异常。
在对一个引用做解引用的动作时,如果引用 == null,表示这个引用不指向任何的对象。就是空指针异常,则此时在对该引用使用 . 或者 [] 操作符,就会抛出 NullPointerException 了。
举例:
空指针的时候解引用就会出现空指针异常。

int[] arr = null;
System.out.println(arr.length);
// 运行结果,会出现运行时异常
Exception in thread "main" java.lang.NullPointerException

总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值