1. 基本概念
- 对象(object)/实例(instance):一组相关数据的组织单位+围绕这组数据的各种操作(状态+方法),表现为内存上的一块区域
- 引用(reference):提供给用户(程序员们)来间接操作对象的一个方式
Java不允许程序员直接接触对象,只能通过引用这种工具,间接的操作对象。(对象的大小远大于引用的大小)
例:
String s="Hello World"; // s 是String类型的引用,该引用指向了一个String类型的对象
int[] a={1,2,3,4,5}; //a 是int[]类型的引用,该引用指向了一个 int[] 类型的对象
2. 关于引用指向对象的一些规则:
1.只有引用指向对象,没有对象指向引用,也没有引用指向引用,更没有对象指向对象
2.一个引用可以不指向对象,但如果引用要指向对象上,则只能指到一个对象上;
3.一个对象可以同时被多个引用所指向;
4.操作引用,其实操作的是引用指向的对象。
3. null的理解
int a=null;
通常把这种情况称为:a等于空,或者a等于null。表达的意思是:a这个引用不指向任何对象。
String s=null; //s是一个String类型的引用,但目前还没有指向任何对象
4. 引用的操作符
引用支持的操作符:
赋值:=
比较:==,!=
引用的赋值运算,是让被赋值的引用指向该引用目前指向的对象。
引用的相等与不等比较,是比较两个引用是否指向同一个对象。
例:
int[] a={1,2,3,4,5};
int[] b={1,2,3,4,5};
a==b; // false
a!=b; // true
b = a; // 让b指向a目前指向的对象
a == b; // true
a != b; // false
a=null;
a==b; // false
a!=b; //true
b=null;
a==b; // true
a!=b; // false
5. 解引用
解引用:通过引用 修改/获取 该引用指向的对象中的数据
eg:
sout(a1.length);
sout(a1[0]);
a1[0]=100;
当进行解引用操作时(. []),如果引用是null(不指向任何对象),就会发生NPE(空指针异常)
6. 数组引用的 []操作符
数组类型属于引用类型的一种,数组中的元素实际上放在一个对象(可以称其为数组对象)中。
例:
long[] array={1,2,3,4,5};
只有数组引用才支持 [] 操作符
eg:
int[] a={1,2,3,4,5};
System.out.println(a[0]); // 获取a指向的数组对象的第一个元素
7. 引用的 “ 共享 ” 特性:
如果多个引用指向的是同一个对象,通过其中一个引用对对象进行修改,通过其他引用也可以看到该变化。