一、前言

Java自动装箱和自动拆箱是JDK5.0版本提供的新特性,所以在JDK5.0后的版本中都可以使用,之前的版本则不支持该特性。

理解自动装箱和自动拆箱需要先对java中的8种原始数据类型和相对应的封装类有所了解。

二、8种原始数据类型及其对应的封装类

byte --->Byteshort --->Shortint --->Integerlong --->Longfloat --->Floatdouble --->Doublechar --->Characterboolean ---> Boolean

注:原始数据类型的封装类都在java.lang包下,可以直接使用

三、什么是自动装箱

自动装箱指的是:可以将一个原始数据类型直接赋值给相应的封装类,其类型转换工作由java编译器自动处理,如:

Byte b = 1;

Short s= 2000;

Integer i= 300000;

Float f= 2.5f;

Double d= 2.555;

Character c= '中';

Boolean bln= true;

在没有自动装箱时(JDK5.0前的版本),想要创建一个原始数据类型封装类对象,需要改成下面这种形式(以Integer为例):

//以下三种方式都可创建一个Integer对象

Integer i= new Integer(1);

Integer j= new Integer("1");

Integer k= new Integer.valueOf(1);

注:自动装箱可以简单理解为原始数据类型可以自动装载成封装类

四、什么是自动拆箱

自动拆箱指的是:原始数据类型的封装类对象可以当作原始数据类型来处理,其中的转换工作由java编译器自动处理,如:

Integer i = 2000;

Character c= '中';int value = i + c + 100;

在没有自动拆箱前(JDK5.0前的版本),上述操作需要改成下面这种形式:

Integer i = 2000;

Character c= '中';int value = i.intValue() + c.charValue() + 100;

注:自动拆箱可以简单理解为原始数据类型的封装类可以自动转换成原始数据类型

五、自动装箱、自动拆箱带来的好处

在实际开发中,我们经常会操作原始数据类型的封装类,也经常需要对原始数据类型与封装类相互转换或做一些运算,

如果没有自动装箱和自动拆箱,这些操作装会很烦琐。所以自动装箱和自动拆箱带来的好处是很明显的。

六、使用自动装箱与自动拆箱需要注意的问题,下面以2个案例来说明(面试中常见)

(1) 阅读下面代码,写出输出结果

Integer i = 100;

Integer j= 100;

System.out.println(i==j);

System.out.println(i.equals(j));

Integer m= 200;

Integer n= 200;

System.out.println(m==n);

System.out.println(m.equals(n));int k = 100;

System.out.println(k==j);

System.out.println(j.equals(k));

(2) 阅读下面代码,写出输出结果

Integer i = 100;

Integer j= new Integer(100);

Integer k= Integer.valueOf(100);

System.out.println(i==j);

System.out.println(j== k);

(3)下面代码是否有正确?如果正确,输出结果是什么?

Integer i = 100;long j = 100;

Long k= 100;

System.out.println(i==j);

System.out.println(j== k);

案例分析(1) :

输出结果是:

true

true

false

true

true

true

理解这道题的关键点有2个:

1. "=="比较运算符是引用地址比较,equals()方法是内容比较(注:可通过重写equals()方法自定义比较规则)

2. 原始数据类型在自动装箱成封装类对象时,如果原始数据类型的值为-128~127(相当于byte值范围),java编译器会判断曾经是否有作过相同的转换,如果有,则把以前装载好的封装类对象的引用地址直接赋给当前对象,所以Integer i = 100,Integer j = 100中,i 跟 j 共享一个Integer对象

案例分析(2) :

输出结果是:

false

false

原因:new Integer(100) 与 Integer.valueOf(1)都是重新new出一个对象,所以i,j,k是三个不同的对象

案例分析(3)

代码有误,Long k = 100需要改成Long k = (long) k;

java自动装箱的好处_Java自动装箱、自动拆箱相关推荐

  1. java自动装箱的好处_Java自动拆装箱为什么不起作用了

    背景 有Java基础的同学都知道Java中有Primitive Type(原始类型),比如int.short.作为面向对象的语言,Java同时提供了每个原始类型的包装类型(本质是引用类型Referen ...

  2. java基础(八) 深入解析常量池与装拆箱机制

    ###引言 本文将介绍常量池 与 装箱拆箱机制,之所以将两者合在一起介绍,是因为网上不少文章在谈到常量池时,将包装类的缓存机制,java常量池,不加区别地混在一起讨论,更有甚者完全将这两者视为一个整体 ...

  3. java泛型机制的好处_java 泛型机制

    Java 泛型 泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的(运行阶段泛型没用) 使用泛型的好处是什么? 1.集合中存储的元素类型统一了 2.从集合中取出的元素类型是泛型指定的类型,不 ...

  4. java dao 泛型的好处_java中泛型有什么作用

    泛型的作用如下: 1.类型安全 泛型的主要目标是提高 Java 程序的类型安全.编译时的强类型检查:通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设.没有泛型,这些假设 ...

  5. java bufferedwriter会自动创建文件吗_Java中为什么会有包装类?自动拆装箱必要吗?关于Wrapping Class这是重点!...

    入题 自动封箱与拆箱人人皆可言之道之,但封箱和拆箱却被多数人略之!如此简单的一个机制,却影射着Java的核心理念,不清楚?继续向下看吧~ Java中的数据类别 目前Java中的数据类别分为两种,一种是 ...

  6. java 包装类缺点_Java 自动拆箱和自动装箱学习笔记

    Java 自动拆箱和自动装箱学习笔记 详情参考以下 1. 概述 Java 中的自动装箱和自动拆箱算是一种语法糖,也就是在编译阶段编译器在合适的情况下帮我们的做了自动拆箱和自动装箱. 众所周知,Java ...

  7. Java中的自动装箱和拆箱

    自动装箱和拆箱 自动装箱和拆箱 自动装箱: 拆箱 1. 为什么要有包装类(或封装类) 2. 基本数据类型与对应的包装类: 3. 类型间的转换 4. 何时发生自动装箱和拆箱 赋值.数值运算时 方法调用时 ...

  8. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了,记忆尤深啊- 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这-这-知识盲区- 回到家后小伟赶紧查资料,我透,这不就 ...

  9. Java包装类及自动装箱、拆箱

    Java包装类 基本类型 大小 包装器类型 boolean / Boolean char 16bit Character byte 8bit Byte short /16bit Short int 3 ...

最新文章

  1. sqoop架构_SQOOP架构的深入介绍
  2. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...
  3. 在MasterPage下FindControl的使用方法
  4. ArcGIS中标注之一上下标、分数等特殊形式标注(转)
  5. B - Modular Inverse
  6. [补档][中山市选2011]杀人游戏
  7. 关于NandFlash在实际产品使用上的一些经验
  8. java安全编码指南之:线程安全规则
  9. SIT与UAT的分别
  10. 角速度求积分能得到欧拉角吗_一个有趣的反常积分问题
  11. 升级Struts2.5后使用DMI动态方法调用遇到问题
  12. 解决Oracle 本地可以连接,远程不能连接问题
  13. 网络操作系统课后练习第三章
  14. Debian For ARM Webmin Server
  15. 【leetcode】【动态规划】最长回文子序列
  16. [转]微信小程序 c#后台支付结果回调
  17. asp.net的优化 服务器控件背后友好的Html和JS
  18. ActiveMQ(四)——异步发消息、异步消费消息与prefetchSize之间的关系
  19. 现代处理器设计——超标量处理器基础1-4
  20. Excel 使用技巧集锦—163种技巧

热门文章

  1. WPF 限制鼠标的移动范围
  2. The project was not built since the source file could not be read
  3. 人以群分c\c++(社交网络中我们给每个人定义了一个“活跃度”)
  4. 从李飞飞、吴恩达、安德鲁的年度总结中,我们发现了三条2018年AI行业发展趋势...
  5. 无论如何 特蕾莎修女
  6. PHP中的 empty() 函数和 isset() 函数
  7. java计算机毕业设计基于springboot健身房课程预约平台
  8. 《基于交替最小二乘法的Spark个性化影片推荐系统》CSCD
  9. TI Matrix GUI测试-Launcher中添加自己的APP
  10. 学习分享:POI-TL 导出Word复杂表格合并分享