我是靠谱客的博主 细腻丝袜,最近开发中收集的这篇文章主要介绍java装箱拆箱机制_深入理解java自动拆箱装箱机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是自动装箱?什么是自动拆箱?

所谓的装箱就是把基本数据类型转换成包装类,拆箱就是把包装类转换成基本数据类型

public static voidmain(String[] args) {//1

Integer a=new Integer(123);

Integer b=new Integer(123);

System.out.println(a==b);//输出 false//2

Integer c=123;

Integer d=123;

System.out.println(c==d);//输出 true//3

Integer e=129;

Integer f=129;

System.out.println(e==f);//输出 false//4

int g=59;

Integer h=new Integer(59);

System.out.println(g==h);//输出 true

}

用以上代码来诠释自动拆装箱机制

a==b中==符号判断的是a和b在堆中所指向的对象是不是同一个

题目1:为false的原因是生成了两个不同的对象a,b存放于堆中,那么这个结果就一定是false。

题目2:因为123这个值介于-128到127之间,在java内存的常量池中会存放一个123的常量,然后c,d两个对象都指向常量池中的123,所以判断为true。

题目3:因为129这个值超出了-128到127这个范围了,所以引用就不向常量池中进行引用了,就会重新生成一个129的Integer对象,故而e,f两个是不同对象,所以是false。

题目4:g==h是比较g,h,g是基本数据类型,h是包装类,这个时候包装类就会自动调用intValue()方法转换为基本数据类型,从而和g就是相等的,所以为true。

Integer b=3

3是int类型,如果要把int类型赋值给Integer包装类,就需要自动装箱,相当于Integer b=Integer.ValueOf(3).

Integer b= new Integer(3);

int a=b;

b是包装类,a=b是把b赋值给a,那么b这个包装类需要自动拆箱,相当于int a = b.intValue();

注意:除double 和float 两种类型以外,其他基本类型入Integer值 在 -128 ~ 127之间时不会新建一个Integer 对象而是从缓存中获取。所以在做 == 判断时 要注意值的大小,如果超过范围,则两个值 即使一样但  == 比较的结果还是false。

最后

以上就是细腻丝袜为你收集整理的java装箱拆箱机制_深入理解java自动拆箱装箱机制的全部内容,希望文章能够帮你解决java装箱拆箱机制_深入理解java自动拆箱装箱机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部