引用类型
1.认识引用(reference)和对象(object)
示例代码1:
String str = "Hello World";
int[] arr = { 1, 2, 3, 4, 5 };
这里的 str 的类型是 String 类型的引用;该引用指向了一个String 类型的对象。
这里的 arr 的类型是 int[] 类型的引用;该引用指向了一个元素类型是 int 的数组类型对象。
2.引用和对象之间的关系
通过引用可以对对象施加影响。我们通常把这个关系称为,该引用指向该对象。
3.引用指向对象的一些规则
- 只有引用指向对象;没有对象指向引用,也没有引用指向引用,更没有对象指向对象。
- 对象可以被多个引用指向。
- 操作引用,其实操作的是引用指向的对象。
4.null 的理解
示例代码2:
int[] arr = null; // a 不指向任何的对象
通常把这种情况称为:arr等于空,或者 arr 等于 null。表达的意思是 arr 这个引用不指向任何对象。
5. 引用的赋值操作符
引用的赋值运算,是让被赋值的引用指向该引用当前指向的对象。
示例代码3:
int[] a = { 1, 2, 3, 4, 5 };
int[] b = null;
b = a;
b=a的含义是让 b 指向 a 目前指向的对象。
示例代码4:
int[] a = null; // a 不指向任何的对象
int[] b = { 1, 2, 3, 4, 5 };
b = a;
b=a的含义是让 b 指向 a 目前指向的对象,由于 a 目前不指向任何的对象。所以 b 也不再指向任何的对象。
6. 引用的比较操作符
引用的相等与不相等的比较,是比较两个引用是否指向同一个对象。
示例代码5:
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。
b = null;
a == b;
// 由于 a 和 b 都不指向对象,所以结果是 true。
a != b;
// 由于 a 和 b 都不指向对象,所以结果是 false。
总结:
- 引用是一种数据类型,用来指向对象。
- 对引用进行的大部分操作实际上都是操作的该引用指向的对象。
- 当多个引用指向同一个对象时,通过哪个引用修改了对象,其他引用都可以看到变化。
- 当一个引用不指向对象时,要求访问其指向的对象,就会遇到 NullPointerException。