测试代码:

System.out.println(0L == 0);//true
System.out.println(((Long)0L).equals(0));//false
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 1000;//如果int values between -128 and 127,VM使用相同的对象,否则创建新的对象。
Integer i4 = 1000;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//false

Autoboxing和unboxing又名拆箱和装箱,简单一点讲,就是从primitive转换到wrapper class,例如int类型到Integer类型就是装箱,而Integer类型到int类型则是拆箱。当然,这里的装箱和拆箱都是auto的,是JVM在工作的内容,事实上不用我们手写,然而也有手写的对应方式,如下所示:

1 int i=10;
2 Integer a=new Integer(i);//装箱的操作
3 int j=a.intValue();//拆箱的操作

上面是手动的,在Java5.0之后已经在JVM中有了自动的装箱和拆箱的转换,如下所示:

1 int i=10;
2 Integer b=i;//自动的装箱
3 int k=b;//自动的拆箱

装箱和拆箱就是这么简单,下面可以看一下自增是怎么一个过程,这是一个很有意思的事情,递减也是一样。

1 Integer d=new Integer(10);
2 d++;//这条语句使得d先拆箱,然后进行++操作,而后对结果再装箱

上面的这条语句,使得Java保证了wrapper class也可以是正常使用通用的操作符,但这绝对不是C++中的运算符重载。你还可以试着分析三元表达式和条件表达式中的装箱拆箱过程。

这里需要注意的一点就是装箱和拆箱在Method Overload时候的问题,例如下面:

1 public void doSomething(double num);
2 public void doSomething(Integer num);

在一个类中有这么两个函数,那么对于整数int k,如果进行doSomething(k)的调用,会调用哪个呢?

在Java1.4中,显然是调用double类型的函数,然而,现在有了自动的拆箱和装箱之后会调用哪个呢?还double类型的函数。这样可以保证以前的代码在现在新的版本中也可以正确的运行。(向下兼容,Backwards compatibility,在计算机中指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。)

注意,Java5中,Method的解析是三个pass的过程:

A.编译器会试着不用任何的boxing和unboxing,或者启用vararg(可变参数)来定位正确的method。这会找到根据Java1.4的规则而会调用的任何method。

B.如果第一个pass失败了,编译器会再度尝试解析method,但这次会允许boxing和unboxing转换。具有vararg的method不在这次pass的考虑中。

C.如果第二个pass也失败了,编译器会做最后一次的尝试,允许boxing和unboxing,且同时也考虑到vararg method。

Java中的boxing和unboxing(转)的更多相关文章

  1. Java中 Auto-boxing/unboxing

    Java 中 Auto-boxing/unboxing 机制,在合适的时机自动打包,解包. 1. 自动将基础类型转换为对象: 2. 自动将对象转换为基础类型: Demo_1: import java. ...

  2. Java中的自动拆箱装箱(Autoboxing&Unboxing)

    一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...

  3. java基础(七)-----深入剖析Java中的装箱和拆箱

    本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...

  4. Java中的三目运算符可能出现的问题

    你真的了解Java中的三目运算符吗? 原创 2018-04-27 刨根问底的 Hollis Hollis Hollis 微信号 hollischuang 功能介绍 一个对Coding有着独特追求的人. ...

  5. 一文读懂什么是Java中的自动拆装箱

    基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为 ...

  6. Java中的自动拆装箱(转)

    出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识.  基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...

  7. Java中的基本类型和包装类型区别

    首先看一下几个测试题,验证一下java中对基本类型和包装类型的理解,看看最后输出的答案对不对,答案在这篇博客中哦: // 第一题: 基本类型和包装类型 int a = 100; Integer b = ...

  8. 什么是Java中的自动拆装箱

    1.基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值 ...

  9. 关于Java中枚举Enum的深入剖析

    在编程语言中我们,都会接触到枚举类型,通常我们进行有穷的列举来实现一些限定.Java也不例外.Java中的枚举类型为Enum,本文将对枚举进行一些比较深入的剖析. 什么是Enum Enum是自Java ...

随机推荐

  1. IntelliJ IDE破解

    1.购买正版用户 2.激活码 一:下载以下jar,放到 bin 破解补丁无需使用注册码,下载地址 idea14 keygen下载地址 二:在下面两个文件中加入-javaagent:E:\IDEA\In ...

  2. Linux设备驱动剖析之IIC(四)

    558行,又重试2次. 560行,调用s3c24xx_i2c_doxfer函数: static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, stru ...

  3. [原]openstack-kilo--issue(二十一) instance can't get ip 虚拟机不能得到ip(2)

    ===问题点==== 在使用vlan模式部署compute节点的时候出现了下面的错误:在controller节点的dhcp-agent.log中 2017-01-22 20:19:34.178 241 ...

  4. NHibernate之旅(21):探索对象状态

    本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...

  5. MyEclipse启动Tomcat缓慢的原因及解决办法

    不知道朋友们是否有一种烦恼:有时候使用MyEclipse启动Tomcat十分缓慢,可能在几分钟前20秒以内,但现在却需要200秒开外:其间内存和CPU都被占用地厉害,而控制台的输出似乎有重复的迹象:而 ...

  6. url自动补全index.php

    location / { index index.html index.htm index.php l.php; autoindex on; if (!-e $request_filename) { ...

  7. 杭电ACM 1297 Children’s Queue

    这道题是排序问题,可以用递归方法解决. 计算F(n): 一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1): 二:当最后一个是女孩F时候,第n-1个肯定是女孩F, ...

  8. HTML滚动文字代码 marquee标签

    看到一个HTML滚动文字代码 marquee标签的内容,非常全面,而且觉得有点意思,可以让大家为自己博客或者网站设置一个漂亮的滚动文字. 以下是原文: <marquee style=" ...

  9. 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers

    题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...

  10. css学习_文本有关的样式属性、sublime快捷生成标签

    1.css中color定义文本的颜色 写法:(最常用的是16进制的) 2.行间距    line-height 3.水平对齐方式   text-align left right  center 4.首 ...