概述
什么是自动装箱?什么是自动拆箱?
所谓的装箱就是把基本数据类型转换成包装类,拆箱就是把包装类转换成基本数据类型
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自动拆箱装箱机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复