发布于2021-03-13 13:18 阅读(1888) 评论(0) 点赞(17) 收藏(0)
我们都知道,Java数据类型有两种:1.基本类型(四类8种);2.引用类型。那么引用类型是什么呢?引用类型可以理解为对象的别名。像String、 数组、还有自己创建的类都是引用类型。
以下面的代码块为例,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");
}
}
引用的本质是一个低配指针。引用的本质就是一个指针(引用就对应一小块内存空间,里面存的就是一个地址,创建一个变量来保存这个地址,这样的变量就是一个指针变量)
以上面的数组的代码为例:
int [] arr=new int[]{1,2,3,4};
int [] arr2=arr;
首先创建了一个新的对象,new int[],然后创建了一个变量来存放这个对象的地址,若 int []arr2=arr,并不是把创建的对象赋值给arr2,而是让arr2这个引用来指向这个新存放的地址。
1)只有引用指向对象(说明引用里面的值是保存着对象的地址),没有对象指向引用(Java引用的地址是无法获取到的,说明无法保存,对象中也无法存地址),也没有引用指向引用,更没有对象指向对象(对象里不能保存地址)。
2)对象可以被多个引用指向(以上面的数组为例,一个数组对象可以由两个引用指向arr和arr1,当然也可以被多个引用指向)
3)操作引用,其实是操作的是引用指向的对象。(Java的引用不需要“显示”的解引用,在以下的操作时就会自动的解引用:
(1)[]取下标(数组独有)
(2)“.”的访问操作也会自动解引用)
4)给引用加上final关键字,此时这个引用的指向就不能被修改。
Java中的null,空引用,这个引用啥对象都没有指向,无法对null引用进行“解引用操作”。没有任何规范描述null里面对应的地址一定是0。若对空引用解引用,则会抛出空指针异常。
如果不解引用,就不会出现这样的异常。内置类型不能用null。
修改引用中保存的地址:以上面的数组为例。=不解引用。
int [] a={1,2,3,4,5};
int [] b=null;
b=a;//让b指向a目前指向的对象
用“.”操作会解引用
int [] arr={1,2,3,4,5};
System.out.println(arr.length);
[]也会进行解引用(不过这是数组特有的)
int [] arr={1,2,3,4,5};
arr[0]=100;
System.out.println(arr[0]);
比较引用中保存的地址是否相同(判断两个引用是否对应到同一个对象中(地址一样,对应的就是两个引用指向同一个对象))
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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!