什么是装箱和拆箱

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

装箱和拆箱的原理

自动装箱都是通过包装类的 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. redistemplate分布式锁实现_基于 Redis SETNX 实现分布式锁
  2. errorgetlast php,php error_clear_last()函数与error_get_last()函数
  3. 21.Azure备份Azure上的虚拟机(下)
  4. 验证大小中括号是否成对闭合匹配
  5. 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)
  6. 3807. 构造字符串——AcWing题库
  7. Spring Tool Suite 4(STS)的下载安装
  8. nginx Access日志格式
  9. 笔记本电脑键盘失灵怎么办
  10. k8s中的端口hostPort、port、nodePort、targetPort
  11. java如何开发视频软件_使用JAVA编写视频播放器
  12. 1992-2022年31省人均gdp/各省人均地区生产总值
  13. opencv项目7---智能识别二维码和条形码
  14. 视频服务器(3) RTSP地址
  15. zabbix添加模板提示“模板不能重复链接到其它模板, 即使透过其它模板”
  16. Linux系统中rpm命令用法详解
  17. 湖广填四川与安岳姓氏源流
  18. 微信小程序数据操作(增、删、改、查),id为随机数
  19. Java的try...catch的用法和作用(为什么要用try...catch)
  20. RFC 2597(assured forwarding PHB Group)

热门文章

  1. 【论文阅读】【三维目标检测】StarNet: Targeted Computation for Object Detection in Point Clouds
  2. 能够温柔耐心地对话的人太少了
  3. HTML5 移动Web App阅读器-1
  4. 常用docker镜像仓库地址
  5. “Bit-Z”公司简介
  6. GMQ数字资产交易所:加强防范意识,远离投资骗局
  7. 转换年金是什么意思呢?
  8. 项目竞标又没中?那是因为你缺少软考证书
  9. 央行发行数字货币的深层逻辑
  10. 使用PTR运算符的情况