前言

在JAVA中,拆箱和装箱操作是发生在基本数据类型和其包装类之间的一种操作。

JAVA中的八种基本类型有:byte short int long float double boolean char

每一种基本数据类型在java中对应的会有一个包装类,其目的是为了丰富其功能。对应关系如下图所示:

一、名词解释

装箱:将基本数据类型转为其包装类就为装箱操作

拆箱:将其包装类转为基本数据类型就为拆箱操作

二、原理:(以int和包装类Integer讲解,其他的类型同理)

Integer a = 100; //100为基本类型,将100赋值给a就会发生自动装箱的操作

int b = a; //此时a为包装类型,将a赋值给b 就会自动发生拆箱操作。

实际发生的操作:

在装箱时会自动调用 Integer 的 valueOf()方法,在拆箱时会自动调用intValue()方法,源码如下

public static Integer valueOf(int i) {

assert IntegerCache.high >= 127;

if (i >= IntegerCache.low && i <= IntegerCache.high)

return IntegerCache.cache[i + (-IntegerCache.low)];

return new Integer(i);

}

/**

* Returns the value of this {@code Integer} as an

* {@code int}.

*/

public int intValue() {

return value;

}

注意:Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。两种浮点数类型的包装类 Float,Double 并没有实现常量池技术

三、实际问题

Integer i1 = 40;

Integer i2 = new Integer(40);

System.out.println(i1==i2);//输出 false

解释:

Integer i1 = 40; Java 在编译的时候执行的代码是Integer.valueOf(40),从而使用的是常量池中的数据

Integer i2 = new Integer(40); 创建的新的对象

所以两个对象不相等

Integer i1 = 40;

Integer i2 = 40;

System.out.println("i1=i2 " + (i1 == i2)); //true

解释:

Integer i1 = 40;

Integer i2 = 40;会发生装箱操作,实际执行的代码是 Integer.valueOf(40),而40是在缓存范围内的,

所以i1 i2都是用的缓存池中的同一数据,地址相同,所以两个对象 == 为true

Integer i1 = 333;

Integer i2 = 333;

System.out.println("i1=i2 " + (i1 == i2)); //false

解释:

Integer i1 = 40;

Integer i2 = 40;会发生装箱操作,实际执行的代码是 Integer.valueOf(40),而333不在缓存范围内,

所以会创建新的Integer对象,地址不同,所以两个对象 == 为false

Integer i1 = 40;

Integer i2 = 40;

Integer i3 = 0;

System.out.println("i1=i2+i3 " + (i1 == i2 + i3)); //输出true

解释:

先计算i2 + i3 ,i2 i3 发生自动拆箱,然后进行相加得到一个int值

然后判断相等时,i1又发生自动拆箱,最后还是两个int数值比较相等

Integer i4 = new Integer(40);

Integer i5 = new Integer(40);

System.out.println("i4=i5 " + (i4 == i5));//输出false

解释:

两个对象 == 比较,比较的是地址,所以不相等

本文地址:https://blog.csdn.net/weixin_42849706/article/details/109638998

希望与广大网友互动??

点此进行留言吧!

拆箱装箱有什么作用JAVA_基础--最简单明了的拆箱装箱解释,带实例相关推荐

  1. Electron 基础入门 简单明了,看完啥都懂了

    什么是 Electron? 介绍 使用 JavaScript, HTML 和 CSS 构建跨平台(Windows.MacOs.Linux)的桌面应用--这是Electron官网的简介 最初被GitHu ...

  2. 组合恒等式1 五个基本的组合恒等式 基础与简单例子

    组合恒等式1 五个基本的组合恒等式 基础与简单例子 四个基本的组合恒等式 应用四个基本恒等式计算组合恒等式的例题 应用四个基本恒等式证明组合恒等式的例题 组合恒等式是组合学中一个非常有趣但也十分具有挑 ...

  3. 传百度无人车计划分拆,百度回复:不实信息,目前未有分拆计划

    据<财经>报道,百度无人车项目正在筹备分拆(spin off)当中,且正在寻找外部投资机构融资.一位接近百度无人车项目人士对<财经>表明,分拆就是时间问题. 对于无人车项目分拆 ...

  4. HTML+CSS基础知识简单版

    HTML+CSS基础知识简单版 一.HTML概述 HTML:超文本标记语言,其实就是用来开发网页的一门语言: CSS:层叠样式表,可以用于渲染网页.美化网页.做网页. 1.HTML介绍 HTML:超文 ...

  5. ARM基础与简单汇编

    汇编 伪操作 GNU汇编中常用的伪操作:1> 1> .text KEIL中Text Start设置项关联,用以说明其下内容属于程序的代码,这些指令在内存中从Text Start设置项指定地 ...

  6. 免堆期由谁申请_免箱期和免堆期的区别_如何避免滞箱

    什么是 免箱期是指你箱子的使用时间,就是从 免箱期和 免堆期是指 而免箱期是指收货人提取货物以后,拉集装箱离开堆场开始到把箱子还回堆场的时间,同样的如果超过这个免费时间而不去提取,那么也要收取超期费了 ...

  7. NOI 1.10 编程基础之简单排序 C++

    NOI 1.10 编程基础之简单排序答案 C++ 接下来这一段代码完全可以造福你,经过提交为AC准确无误! #1.谁考了第k名 首先这一道题简单来说还是使用结构体较为简便.结构体常考题目主要就是排序, ...

  8. 计算机一级教学视频回信,第6章_因特网基础与简单应用--全国计算机等级考试一级MSOFFICE2010版.ppt...

    第6章_因特网基础与简单应用--全国计算机等级考试一级MSOFFICE2010版 * 6.3 使用简单的因特网应用 2) 撰写与发送邮件 发送邮件的具体操作如下: ① 启动Outlook: ② 单击& ...

  9. Linux基础入门,简单讲解

    Linux基础入门,简单讲解 涵盖内容:计算机组成与Linux操作系统概论 任务要求:大概了解计算机的主要组成部件,明白计算机磁盘分区方式,常用的计算单元换算以及LINUX是什么.有什么特点即可. 文 ...

最新文章

  1. HTML的标签描述17
  2. Leaflet绘制热力图【转】
  3. Annotation之二:@Inherited注解继承情况
  4. xshell搭建宝塔没有远程命令密码框框弹出来_服务器安装宝塔控制面板+wordpress搭建个人网站...
  5. 远程服务器部署spring boot 项目(centos7为例)
  6. javascript-数组数据类型属性和方法-数组的遍历
  7. Opencv--从CalibrateCamera到SolvePnp(一)
  8. 【Elasticsearch】检查您的 Elasticsearch 分片
  9. 基于中颖SH79F168单片机的航模无刷电调方案
  10. php 判断邮箱是否存在,PHP-PHP中如何验证是否存在邮箱?
  11. Maven的setting配置详解
  12. mac设置第三方输入法为默认输入法
  13. HMI车载开发:汽车与Android的关系:Android Automotive
  14. 常用的数量统计量的计算及统计意义
  15. 线性代数之从线性方程组看线性组合
  16. matlab中的帮助命令
  17. 记:css绘制小猪佩奇的项目及踩过的坑
  18. 【技术分享】新核心业务系统数据架构规划与数据治理
  19. 【资源】OpenCV3编程入门_毛星云
  20. 时间序列分析之预处理(一)

热门文章

  1. reshape [] matlab,matlab reshape函数
  2. WebService可以远程调试调用
  3. Spring Boot Serverless 实战系列“架构篇”首发 | 光速入门函数计算
  4. 重磅上线|国内首个 Kubernetes SIG-Cloud-Provider 子项目揭秘
  5. 历史上的今天:乔布斯出生;苹果推出 Thunderbolt 接口;WhatsApp 创始人诞生
  6. 斯坦福 AIMI 打造世界更大的开源医学数据集
  7. 什么是 PostgreSQL 横向子查询?
  8. 几行代码撸了一天,源码到底该如何读?
  9. 腾讯回应两块八卖《鬼谷八荒》:已下架并退款;iMac Pro 售完即停产;iCloud 识别姓氏闹乌龙 | 极客头条...
  10. 美团败诉,赔偿饿了么 100 万元;华为 Mate X2 首发秒没;库克获 8 亿年终奖 | 极客头条...