引用是如何理解的
对于引用这个东西,我觉得大家多多少少有些了解,我也是的呐,但是最近的学习中,我发现,对于引用这个概念我也是大致的懂了,概念有些模棱两可,下面呢,我就简单的写一下最近学到的东西
首先呢,咱们先举一个小例子
public class Node {
public int val;
public Node next;
}
Node p = new Node();
Node q = new Node();
p==q;返回什么:p、q是否指向同一个对象
p != q;返回什么:p、q是否指向不同的对象
p = q;这句话你是怎么理解的呢?
是不是和我一样,让p这个引用指向q这个引用。注意哦,注意哦,这种说法是错误的,用的时候我想大家都知道怎么用,可是表达起来就会出错。
这句话转换成语言描述就是:让p这个引用指向q这个引用目前指向的对象 。
同理:
1、p.next = q;让p这个引用指向的对象中有一个next引用,让这个next引用指向q这个引用目前指向的对象。
2、p = q.next;p指向q这个引用的对象中的next引用指向的对象
3、p.next = q.next;让p的next引用指向q的next引用指向的对象
注意几个问题
大家先来判断一下对不对,Yes or No
1、引用可以指向两个引用吗?
2、一个引用可以同时指向两个对象吗?
3、p == null;应该如何表述呢?
首先:引用是不能指向引用的!!! 引用是一种只能指向对象的数据类型!
引用不可以同时指向两个引用!(但是引用的对象是可以变得)
p == null;应该如何表述呢?p这个引用不指向任何对象(无论原来p指向哪个对象,现在p不再指向任何对象了)
总结:
- 引用只能指向对象
- 引用不能指向对象
- 没有对象指向这回事(更没有对象指向对象,没有对象指向引用)
- 在任意时刻:一个引用最多只能指向一个对象,但是一个对象可以同时被多个引用指向
- 引用 = null;引用不指向任何对象;
- 引用 == null;返回引用当前是否没有指向任何对象
- 引用 !=null;返回引用当前是否又指向任何对象
- 引用是引用,对象是对象,不是一回事儿