本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

引用(Java)

发布于2021-03-13 13:18     阅读(1888)     评论(0)     点赞(17)     收藏(0)


前言

我们都知道,Java数据类型有两种:1.基本类型(四类8种);2.引用类型。那么引用类型是什么呢?引用类型可以理解为对象的别名。像String、 数组、还有自己创建的类都是引用类型。

1.引用与对象

1.1引用与对象的区别

以下面的代码块为例,new创建一个数组对象,后续在操作这个数组对象的时候用arr这个引用去操作。或者new一个字符串对象,然后后期用到这个字符串对象的时候,就可以直接使用这个引用,相当于给这个对象起了名字,这个对象也可以起多个名字。如下面这个数组,利用arr2和arr都可以操作这个数组。

public class Test {
    public static void main(String[] args) {
        int [] arr=new int[]{1,2,3,4};
        int [] arr2=arr;
        
        String str=new String("hello");
    }
}

1.2引用的说明

引用的本质是一个低配指针。引用的本质就是一个指针(引用就对应一小块内存空间,里面存的就是一个地址,创建一个变量来保存这个地址,这样的变量就是一个指针变量)
以上面的数组的代码为例:

 int [] arr=new int[]{1,2,3,4};
        int [] arr2=arr;

首先创建了一个新的对象,new int[],然后创建了一个变量来存放这个对象的地址,若 int []arr2=arr,并不是把创建的对象赋值给arr2,而是让arr2这个引用来指向这个新存放的地址。

在这里插入图片描述

2.关于引用指向的一些规则

1)只有引用指向对象(说明引用里面的值是保存着对象的地址),没有对象指向引用(Java引用的地址是无法获取到的,说明无法保存,对象中也无法存地址),也没有引用指向引用,更没有对象指向对象(对象里不能保存地址)。
2)对象可以被多个引用指向(以上面的数组为例,一个数组对象可以由两个引用指向arr和arr1,当然也可以被多个引用指向)
3)操作引用,其实是操作的是引用指向的对象。(Java的引用不需要“显示”的解引用,在以下的操作时就会自动的解引用:
(1)[]取下标(数组独有)
(2)“.”的访问操作也会自动解引用)
4)给引用加上final关键字,此时这个引用的指向就不能被修改。

3.Java中的空引用

Java中的null,空引用,这个引用啥对象都没有指向,无法对null引用进行“解引用操作”。没有任何规范描述null里面对应的地址一定是0。若对空引用解引用,则会抛出空指针异常。
在这里插入图片描述
如果不解引用,就不会出现这样的异常。内置类型不能用null。

4.引用的操作符理解

4.1引用的赋值操作符的理解

修改引用中保存的地址:以上面的数组为例。=不解引用。

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

        b=a;//让b指向a目前指向的对象

4.2“.”成员访问操作[解引用]

用“.”操作会解引用

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

4.3[]数组特有的[解引用]

[]也会进行解引用(不过这是数组特有的)

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

4.4引用的比较操作符的理解(==)

比较引用中保存的地址是否相同(判断两个引用是否对应到同一个对象中(地址一样,对应的就是两个引用指向同一个对象))
Java中的String的不能直接使用 ==来进行比较内容,因为它比较的引用存放的地址是否相同。因此需要想比较字符串的内容,就需要使用equals方法。

int [] arr={1,2,3,4,5};
        int [] arr2={2,3,4,5};
        
        if(arr==arr2){
            System.out.println(arr[2]);
        }else{
            System.out.println(arr2[1]);
        }

由于arr与arr2指向的对象不同,因此该语句会执行else语句。

总结

1.引用是一种数据类型,用来指向对象
2.对引用进行的大部分操作实际上都是操作该引用指向的对象
3.当多个引用指向同一个对象时,通过哪个引用修改了对象,其他引用都可以看到变化
4.当一个引用不指向对象时,要求访问其指向的对象,就会遇到NUllPointerException

原文链接:https://blog.csdn.net/qq_52206533/article/details/114649545



所属网站分类: 技术文章 > 博客

作者:Djfj

链接:http://www.javaheidong.com/blog/article/114185/cdc2f7ce30ec8c9c61c6/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)