一:初步认识引用和对象

定义:引用和对象,都是内存中数据的一种规定的组织方式。

例如:
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 可以看到修改后的变化。