自动装箱与自动拆箱

简介: 自动装箱与自动拆箱

自动装箱与自动拆箱给我们开发提供了很多的便利,在jdk 1.5中,自动装箱首次被引入。而在jdk 1.5之前,如果你想要定义一个value为100的Integer对象,则需要通过new出来。


断点跟踪


为了能够了解,自动装箱与自动拆箱的过程,我们打上断点一步步跟踪看看自动装箱的过程。


自动装箱

f39105e423f31e8ef88189f2be53eaf2.png

接下来抬到了Integer的valueOf(int i)方法,当然我这里设置的数是在==[-128,127]==之中,一会在对范围之外的数据进行跟踪。


2685ad47d20f4ca291758f2bf80c69cc.png


下一步,


414994a6993720ff45a3f17bece299cd.png


紧接着我们继续执行,之后就跳出了该方法


8c620f7d833f92647c0cd06f111be779.png


于是通过跟踪代码的执行过程可以发现Integer的自动装箱是通过valueOf来执行的。


接下来,在来看看范围之外的数据的封装有什么变化


95cbdbe9e1c10ad9f4a2195ebdb8b332.png


进入下一步可以看到依然是进入了valueOf方法,主意这个天剑i >= IntegerCache.low && i <= IntegerCache.high,意思是i>=-128&&i<=127


1eef653af10fbc339b037adec5cbe0d6.png


下一步,这里因为输入的数据是大于127,所以直接创建了一个对象,并把他返回


92ad9f499aedd71e82cbf45680c8e368.png


继续下一步,跳到了构造方法之中,也就是说此时对象已经被创建,现在在进行的就是对象的赋初值。


10e6fd6736e189f9242a30b16c9568b5.png


结论:


自动装箱就是jdk自己自动帮我们完成了Integer.valueOf()方法的调用


自动拆箱

打断点


8243f3f70e1d3a6b35f817c5e5d711f0.png


下一步,跳入了intValue()方法。


5b869b29f1ac67ebabacf9330a52ecdf.png


再下一步,


5cef3ece2135e200de425c3e25c3e815.png


继续将i赋值为128也会得到相同的结果


结论


自动拆箱就是jdk自动帮我们调用了IntValue()方法


i赋值为128也会得到相同的结果


相关文章
|
Java
包装类的使用
包装类的使用
61 0
|
3月前
|
存储 Java 编译器
Java零基础(17) - 自动拆箱与自动装箱
【8月更文挑战第17天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 3
|
4月前
|
存储 安全 Java
day7:基本类型转换、包装类、自动装箱、自动拆箱
【7月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 3
|
缓存 Java 编译器
自动拆箱与装箱
自动拆箱与装箱
|
缓存
包装类
包装类
66 0
|
缓存 Java
包装类(装箱&拆箱&数据类型转换)
​ 在Java5 中添加了两个新特性,那就是自动装箱和拆箱,因为基本类型的广泛使用,但是Java 又是面向对象的语言,所以提供了包装类型的支持。
50 0
|
Java API
Java开发——18.常用类(包装类,拆箱和装箱;BigInteger+BigDecimal)
Java中只有两种数据类型:基本数据类型和引用数据类型。
Java开发——18.常用类(包装类,拆箱和装箱;BigInteger+BigDecimal)
|
Java 大数据
6、包装类及其相关
包装类及其相关
133 0
6、包装类及其相关
|
IDE Java 编译器
Java中自动装箱和拆箱
装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。 这里的`primitive type`就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。 通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6个类派生于公共的超类Number)。
Integer自动拆箱与自动装箱的相关问题
Integer自动拆箱与自动装箱的相关问题