什么是装箱和拆箱

装箱就是自动将基本数据类型转换为包装器类型。
拆箱就是自动将包装器类型转换为基本数据类型。

装箱和拆箱的原理

自动装箱都是通过包装类的 valueOf() 方法来实现的.自动拆箱都是通过包装类对象的 xxxValue() 来实现的。

场景介绍

  • 包装类与基本数据类型进行比较运算,是先将包装类进行拆箱成基本数据类型,然后进行比较的。
  • 两个包装类型之间的运算,会被自动拆箱成基本类型进行计算。
  • 基本数据类型放入集合类中的时候,会进行自动装箱。
  • 三目运算符的使用过程中。当第二,第三位操作数分别为基本类型和对象时,其中的对象就会拆箱为基本类型进行操作。
  • 函数参数与返回值。

装箱缓存

  • 装箱才会使用到缓存。
  • Byte, Short, Long有固定范围: -128 到 127。对于Character, 范围是 0 到 127。除了Integer以外,这个范围都不能改变。

总结

  1. Ingeter是int的包装类,int的初始值为0,Ingeter的初始值为null。
  2. 无论如何,Integer与new Integer()不会相等。不会经历拆箱过程,Integer i8 = new Integer(127)的引用指向堆,而Integer i4 = 127指向专门存放他的内存(常量池),他们的内存地址不一样,使用 == 比较都为false。
  3. 两个都是非new出来的Integer,使用 == 比较,如果数在-128到127之间,则是true,否则为false。
  4. 两个都是new出来的,==比较都为false。若要比较值是否相等,需使用equals方法进行比较。
  5. int和Integer(无论new否)比较,都为true,因为会把Integer自动拆箱为int再去比。

实验

public class Test {public static void main(String[] args) {// 两个new出来的Integer类型的数据比较,相当于把new出来的地址作比较Integer a0 = new Integer(1);Integer a1 = new Integer(1);System.out.println("Integer 对象作比较 a0 == a1: " + (a0 == a1));// 调用intValue方法得到其int值System.out.println("使用intValue得到int值作比较 a0 == a1: " + (a0.intValue() == a1.intValue()));// 把Integer类型的变量拆箱成int类型int a2 = 1;System.out.println("将Integer自动拆箱 a1 == a2: " + (a1 == a2));// Integer对象赋值比较,其实也是内存地址的比较// 自动装箱,如果在-128到127之间,则值存在常量池中Integer a3 = 30;Integer a4 = 30;System.out.println("Integer对象赋值比较 a3 == a4: " + (a3 == a4));// Integer对象赋值(超过-128~127区间)比较Integer a5 = 128;Integer a6 = 128;System.out.println("Integer对象赋值(超过-128~127区间)比较 a5 == a6: " + (a5 == a6));// Integer对象赋值(超过-128~127区间)比较,调用intValue后再作比较Integer a7 = 128;Integer a8 = 128;System.out.println("Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: " + (a7.intValue() == a8.intValue()));// 使用Integer类的equals()方法进行的是数值的比较 Integer a9 = 129;Integer a10 = 129;System.out.println("Integer类的equals()方法进行的是数值的比较 a9 == a10: " + a9.equals(a10));}
}

java中的装箱和拆箱详解相关推荐

  1. C#中定义装箱和拆箱详解

    1. C#装箱和拆箱是一个抽象的概念. 2. C#装箱是将值类型转换为引用类型:拆箱是将引用类型转换为值类型. 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与 ...

  2. Java中的装箱和拆箱剖析

    Java中的装箱和拆箱剖析 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下乐橙谷公会面试笔试中经常遇到的 ...

  3. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  4. 一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  5. Java中的装箱和拆箱—这一篇全了解

    Java中的拆箱装箱-这一篇全了解 一.什么是装箱?什么是拆箱? Java为每种基本数据类型都提供了对应的包装器类型,让基本类型具备对象的特征,实现更多的功能..在Java SE5之前,如果要生成一个 ...

  6. Java 中的自动装箱和拆箱详解

    自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换.例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 型等等.如果转换以相反的方式 ...

  7. java基础提升篇:深入剖析Java中的装箱和拆箱

    一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5 ...

  8. java中的装箱及拆箱

    java中存在8中基本的数据类型,每一种数据类型都有包装类型. 包装类型:每一个基本的数据类型都会------对应一个包装类型. boolean------------------>Boolea ...

  9. JAVA中的装箱与拆箱

    1.定义:装箱是将值类型装换成引用类型的过程:拆箱就是将引用类型转换成值类型的过程:  装箱:用于在垃圾回收堆中储存值类型.装箱是值类型到Object类型或到此类型所实现的任何接口类型的隐式转换.   ...

最新文章

  1. word2vec 中的数学原理具体解释(四)基于 Hierarchical Softmax 的模型
  2. Thrift解读(五)——server端RPC接收与返回值的回送
  3. 2.5-冗余VLAN
  4. Opencv判断是否加载图片的两种方法
  5. mysql 标识符规则_MySQL 标识符到底区分大小写么——官方文档告诉你
  6. webjars管理静态资源
  7. apollo报:系统出错,请重试或联系系统负责人
  8. oracle 会话 临时表,Oracle 学习系列之二(会话与事务级临时表)
  9. RabbitMQ的5种队列_Work模式_入门试炼_第5篇
  10. 盛辉智能机器人安全吗_人工智能真的安全吗?快看这些已经发出的警告
  11. ios进度条Demo一个
  12. 怎么自学python-你是如何自学 Python 的?
  13. [渝粤教育] 江西理工大学 新融合大学英语(I) 参考 资料
  14. 阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门
  15. keepalive高可用
  16. 【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)
  17. UniWebView3.8
  18. kafka和ZK的关系
  19. 太赞!机器学习、深度学习绘图模板.ppt
  20. iOS 技术支持网址:

热门文章

  1. Android系统 T-Mobile G1手机全面解读
  2. java程序员面试被骗,心灰意冷,却不想峰回路转,“意外“拿到美团offer
  3. win7硬件要求_可以玩使命召唤14,只要win7系统,怎么配电脑?-鑫谷光荣使命GT...
  4. 微信小程序关闭苹果手机的下拉刷新
  5. C语言五子棋进阶版(增设玩家对战,大棋盘,棋盘行列对应等)
  6. linux 冷启动命令,鸟哥的 Linux 私房菜7 -- 首次开机关机与基本指令执行
  7. TiDB 4.0 为解决热点问题做了哪些改进?
  8. 手机网速突然变慢是什么原因
  9. 中的实践 中兴_中兴5G切片获得高度肯定!
  10. 新支点操作系统linux内核版本,新支点操作系统入围