新手学JAVA(四)----装箱与拆箱


一 什么是装箱?什么是拆箱?



在Java中,Java对每种基本数据类型都提供了对象的包装器类型。看下表:

                                                                                                           包装类对应表

基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

在Java SE5之前,如果要生成一个数值为50的Integer对象,需要这么进行:

Integer obj = new Integer(50);

而在Java SE5开始,Java就封装了自动装箱的特性,定义数值是这样做就可以:

Integer obj = 50;

这个过程中自动根据数值创建Integer对象,就叫装箱;

简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。

那什么是拆箱?和装箱对象,就是将包装器类型转换成基本数据类型。拆装箱的过程如下图:


二 拆装箱是如何实现的?



我们以Double类型为例,先看下面的一段代码:

public class Main{
        public static void main(String[] args){
                Double DB = 10.34;
                double db=DB;
        }
}

然后我们对这段代码进行反编译,结果如下:

然后咱们换成Integer类型的再试试,直接看结果:

看出有什么相同来了没有,程序在自动装箱的时候自动调用valueof方法,在拆箱的时候,调用相应的类型的”**.**Value”方法。

由此可以看出,程序的自动装箱是调用包装器类型的valueof方法,而拆箱是调用包装器的”**.**Value”方法来实现的。

时间: 2024-11-02 16:23:44

新手学JAVA(四)----装箱与拆箱的相关文章

Java自动装箱与拆箱

  自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考.   首先有这样一道题,给出下面代码的输出结果: public class AutoBoxing { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d =

JAVA 入坑教程 | 章节九 详解java的装箱和拆箱

简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节 什么是装箱?什么是拆箱?代码如何展示? 装箱过程是怎样的?拆箱过程是怎样的? 有问题可加入安卓QQ群: 246231638 装箱和拆箱的概念 简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节: //自动装箱 Integer total = 9999; //自动拆箱 int totalprim = total; 装箱:就是自动将基本数据类型转换为包装器类型: 拆箱:就是自动将包装器类型转换为基本数

Java装箱和拆箱详解

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 若有不正之处,请谅解和批评指正,不胜感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3780005.html 一.什么是装箱?什么是

Java——1个自动拆箱的例子

自以为对Java的装箱和拆箱很了解了.今天又人给我出了一道题,我一看就说 "不可能吧".结果已运行真的能打印出"OK" 在if这一句断下来,然后F5.总共会调用4次intValue().Java就是通过调用intValue来拆箱的.这是一个自动拆箱的场景,我也是第一次见. 注意第5次按F5时直接进到if里面了. 也就是说 i!=j这一句不会自动拆箱,它比较的是地址,切记. public class Test { public static void main(Str

Java JDK之自动装箱和拆箱

基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能.虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用. autoboxing和unboxing 在Java中,所有要处理的东西几乎都是对象 (Object),例如之前所使用的Scanner是对象,字符串(String)也是对象,之后还会看到更多的对象.然而基本(Primitive)数据类型不是对象,也就是您

深入剖析Java中的装箱和拆箱

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new I

深入剖析Java中的装箱和拆箱(转)

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE

Java中的装箱与拆箱

在J2SE5.0后推出了自动装箱和拆箱的功能,以提高我们的开发效率,然而自动装箱和拆箱实际上是通过编译器来支持的(并非语言本身,或者说虚拟机),因而这种支持也隐藏了部分内部实质,再加上某些类的优化(比如Integer里面的缓存等,参看关于缓存节),就更加容易在特定的环境下产生问题,并且如果不知道原来还无法调试.以下先是简单的介绍了编译器对装箱和拆箱的实现,并根据实现简单介绍一下可能会遇到的几个问题. 装箱和拆箱实现 以下装箱和拆箱代码:        Object value = 10;    

java基础:合法转换与自动装箱、拆箱

问题描述 java基础:合法转换与自动装箱.拆箱 Short y = 100; int z = y; 这两句代码编译正确,但为什么呢?是y先拆箱成short,然后合法转换成int吗? short y1 = 100; Integer z1 = y1; 而这两句代码编译报错,如果按照上面的逻辑,可以y1先合法转换int,然后自动装箱成Integer呀? 解决方案 涉及到隐式转换. 对非引用类型赋值的时候,对基本数据类型会进行自动拆箱,然后可以隐式转换为大类型: 如第一种. 而引用类型则是先装箱再赋值

Java中的装箱和拆箱深入理解_java

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: 复制代码 代码如下: Intege