Java中的引用和对象

Java中的引用和对象

Java中的对象有很多,比如String对象,数组对象,还有类实例化出来的对象,对象在Java中占据着重要的地位。但是我们平时并不直接操作对象,而是通过引用来对对象进行访问。

目录

Java中的引用和对象

一、初步认识引用和对象

二、理解引用和对象之间的关系

三、关于引用指向对象的规则

1、只有引用指向对象

2、对象可以被多个引用指向

四、关于引用的操作

1、" . " 操作(自动解引用)

2、[]操作(自动解引用)

3、= 操作

4、== 操作和!= 操作

五、null


一、初步认识引用和对象

String str = "nihao";
int[] a = {1,2,3,4,5};

这里的 str 和 a 都是引用,它们分别指向了一个 String 类型和一个 int 数组类型的对象。

我们可以吧引用先简单的理解为对象的别名,或者是一个低配版指针(总之可以通过引用找到对象)。

二、理解引用和对象之间的关系

我们以人为例,对象就是人这个个体,而引用可以看成人的名字或者代号。我们需要一个人完成一项任务的时候,只需要说:小明,去干一下什么什么就可以了。

通过上面的例子,我们可以看出,通过引用我们可以对对象施加影响

我们在上面说,引用其实就是一个低配版的指针,其实引用中存放的还是对象的地址,只不过由于Java的安全性,裁减了很多的功能。

 

三、关于引用指向对象的规则

1、只有引用指向对象

只有引用指向对象,没有对象指向引用,也没有引用指向引用,更没有对象指向对象。

String str = "nihao";
String str1 = str;

这里的内存结构是这样的:

2、对象可以被多个引用指向

根据我们上面画的图,这一点显而易见。

 

四、关于引用的操作

我们前面说过,引用是低配版指针,为了保证它的安全性裁减了很多指针的功能,只保留了以下四个功能:

1、" . " 操作(自动解引用)

. 操作符,我们可以理解成“的”的意思,实际上就是通过引用访问对象。

可以把它理解为C语言的" . " 操作,只不过这里自动完成了解引用操作(&);

int[] a = {1,2,3,4,5};
System.out.println(a.length);

 通过a.length我们获取了a指向的数组对象的长度。

2、[]操作(自动解引用)

只有数组引用才支持[]操作!

在进行[]操作时也自动进行了解引用操作(&);

int[] a = {1,2,3,4,5};
System.out.println(a[2]);

获取a指向的数组对象的第3个元素。

3、= 操作

int[] a = {1,2,3,4,5};
int[] b = a;
b[2] = 10;
for(int x : a){
    System.out.print(x + " ");
}

输出的结果为:

可见 b 和 a 指向了同一个对象,当使用 b 改变对象元素的时候,可以通过 a 查看变化。

4、== 操作和!= 操作

在引用中 == 和 != 操作都是对引用中的地址进行比较的,而不是对对象进行比较

String str = "nihao";
String str1 = "niHao";
System.out.println(str == str1);
System.out.println(str.equals(str1));

第三行代码中 == 是比较 str 和 str1 中存放的地址值是否一样;而第四行代码才是比较字符串的内容是否相同。可以得出这两个结果都是false。

五、null

在C中我们都知道NULL是一个宏,它代表的值就是 0 ;而在Java中null代表空引用,即不指向任何对象。

        int[] a = {1,2,3,4,5};
        int[] b = null;
        b = a;

让 b 指向 a 目前指向的对象。

        int[] a = null;
        int[] b = {1,2,3,4,5};
        b = a;

a 不指向任何对象,让 a 指向 b 目前指向的对象,所以 b 也不指向任何对象。

由于空引用不指向任何对象,所以不能对空引用解引用(也就是 . 和 [] 操作),否则会抛出NullPointerException异常,这个异常是空指针异常,也可以印证引用实际上就是指针。

int[] a = null;
System.out.println(a.length);

运行结果:

int[] a = null;
System.out.println(a[2]);

运行结果:

 

今天的内容就分享到这里,希望大家多多评论,共同提高。

 

 

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值