引用

初步认识引用

引用本质上就是一个低配版的指针
引用本质上就是一个指针,引用就对应一块内存空间,里面存的就说一个地址。

C 的指针功能是很多的,如:取地址,解引用,加减整数,指针比较,[] 取下标…

Java 的引用就把上面的很多功能裁剪掉了:

把取地址,加减整数,指针相减,[]去下标直接裁掉了 解引用 操作不需要使用 * 显示进行(再需要的时候自动解引用) 比较操作 只能使用
!= 和 == 进行比较。 < > <= >= 这些都不支持了

Java 的引用不需要 “显式” 进行解引用
在以下操作时就会自动的解引用:

  1. “[]” 取下标 (数组独有)
  2. “.” 成员访问操作

引用与对象之间的关系

通过引用可以对对象施加影响,我们通常把这个关系称为,该引用指向该对象。

关于引用对象指向的一些规则

  1. 只有引用指向对象;没有对象指向引用,也没有引用指向引用,更没有对象指向对象
  2. 对象可以被多个引用指向。
  3. 操作引用,其实操作的是引用指向的对象。

对 null 的理解

int[] a = null;    //a 不指向任何对象

通常把这种情况称为:a 等于空,或者 a 等于 null 。表达的意思就是 a 这个引用不指向任何对象。

引用的赋值操作符理解

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

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

a = null;
a == b; // 由于 a 不指向对象,b 指向对象,所以结果是 false
a != b; // 由于 a 不指向对象,b 指向对象,所以结果是 true

引用的操作符理解

引用的 “.” 操作符,可以当成 “的” 理解,实际上就是通过引用访问对象。
Java 的引用支持的操作有这么几个:

  1. “.” 成员访问操作(解引用)
  2. 数组特有的(解引用)
  3. = 修改隐痛值保存的地址的值(不解引用)
  4. == 比较引用中保存的地址是否相同(判断两个引用是否对应到同一个对象)(不解引用)

NullPointerException 异常

常被翻译为空指针异常,但大家要注意,这里的指针和我们 C 语言解答学过的指针毫无关系。
已知,在对一个引用做 “.” 或者 “[]” 操作的时候,就是需要通过引用操作引用指向的对象。
如果有 一个 引用 == null,则表示该引用没有指向任何对象。则此时在对该引用使用 . 或者 “[]” 操作符,就会抛出 NullPointerException 了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值