一:初步认识引用和对象
定义:引用和对象,都是内存中数据的一种规定的组织方式。
例如:
String 对象:String s = "Hello World";//这里s是引用,指向了一个String类型的对象
数组对象: int[] arr = {1,2,3};//这里arr是引用,指向了一个int类型的数组类型对象
注意事项:
1、JAVA中没有指针和地址的概念。
2、JAVA中不允许程序直接接触到对象,只能通过引用这种工具,间接的操作对象。
好处:(1)安全!接触不到对象,就不会破坏对象。
(2)可控! 只能使用规定范围内的功能。
二:关于引用指向对象的一些规则
1.只能引用指向对象,不能对象指向引用,也不能引用指向引用,更不会对象指向对象。
2.引用同一时刻只能指向一个对象,对象同一时刻可以被多个引用指向。
3.引用需要细分类型,同类型中才可以指向。
例如:汽车遥控器(引用)不能遥控冰箱(对象)
Scanner s;
Random r;
String str;
int[] arr;
4.引用可以不指向任何对象,称为null。
int[] a = null;
//a 不指向任何对象,可以理解为引用暂时处于赋闲状态,通常称为a等于空,或者a是空
5.引用的赋值运算,是让被赋值的引用b,去指向该引用a当前指向的对象。
int[] a = { 1, 2, 3, 4, 5 };
int[] b = null;//b 不指向任何对象
b = a;
// 让 b 指向 a 目前指向的对象,b起初为null,被赋值后成为{1,2,3,4,5}
6.引用的比较运算,是比较两个引用是否指向同一个对象
6、引用的比较
(1)引用没有 > 和 < 的比较
(2)引用 ==
例如: String s = ...;
String t = ...;
s == t => true 代表 s 和 t 目前指向同一个对象(有可能 s 和 t 目前都是 null,都没指向对象)
s != t => true 代表 s 和 t 目前没有指向同一个对象(有可能 存在一个是null,一个不是的情况)
三:解引用
定义:对一个引用进行解引用,就是通过引用,找到该引用指向的对象,修改/获取该引用指向的对象中的数据。
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]);
//找到arr指向的数组对象,发布获取其第一个元素的命令
四: 通过引用操作对象表现出的“共享”特性
int[] a = { 1, 2, 3, 4, 5 };
System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5]
int[] b = a;
System.out.println(Arrays.toString(b)); // [1, 2, 3, 4, 5]
b[0] = 100;
System.out.println(Arrays.toString(b)); // [100, 2, 3, 4, 5]
//由于通过引用修改的对象中的数据,而 a 和 b 指向同一个对象。
//所以,通过 b 修改了数组对象中的数据.
//之后,通过 a 可以看到修改后的变化。