java里的自动装箱和自动拆箱

2023-05-16

所有的基本类型都有与之对应的类,例如:

int

Integer

byte

Byte

short

Short

long

Long

float

Float

double

Double

char

Char

boolean

Boolean

简单来说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器转换为基本数据类型。如下:

 

当我们创建一个类的对象实例是。我们一般都会这样:

Class i=new class();

当我们创建一个Integer对象时,我们可以这样:

Integer i=100;//要注意的是,这里不是int i=100,int是一个基本类型,而Integer是一个类类型。

实际上,当执行上面的代码时,系统已经为我们执行了:

Integer i=Integer.valueOf(100);即基本数据类型的自动装箱功能。

基本数据类型与对象的区别

基本数据类型不是对象,也就是用int、double、boolean等定义的变量或常量。它没有可以调用的方法。比如:

Int i=1;//i后面没有可调用方法

Integer i=1;//i后面就有很多可以调用的方法

自动装箱:

例如:Integer i = 100;

相当于编译器自动为您作以下的语法编译:

Integer i = Integer.valueOf(100);

自动拆箱:
自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。如下可实现自动拆箱:

1 Integer i = 10; //装箱 
2  int t = i; //拆箱,实际上执行了 int t = i.intValue();

在运算时也可以自动拆箱

1 Integer i = 10; 
2 System.out.println(i++);

 Integer的自动装箱

//在-128~127 之外的数
 Integer i1 =200;  
 Integer i2 =200;          
 System.out.println("i1==i2: "+(i1==i2));                   
// 在-128~127 之内的数
 Integer i3 =100;  
 Integer i4 =100;  
 System.out.println("i3==i4: "+(i3==i4));

输出结果是:

    i1==i2: false
    i3==i4: true

这就说明,equals()比较的是两个对象的值是否相同,“==”比较的还两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相同。

前面说过,int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:

public static Integer valueOf(int i) {

    if(i >= -128 && i <= IntegerCache.high)  // 没有设置的话,IngegerCache.high 默认是127

        return IntegerCache.cache[i + 128];

    else

        return new Integer(i);

}

对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)

所以范例中,i3 与 i4实际上是指向同一个对象。

而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。

当然,当不使用自动装箱功能的时候,情况与普通类对象一样,请看下例:

1 Integer i3 =new Integer(100); 
2 Integer i4 =new Integer(100); 
3 System.out.println("i3==i4: "+(i3==i4));//显示false

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java里的自动装箱和自动拆箱 的相关文章

随机推荐

  • java:获取当月最后一天

    设置时间格式 SimpleDateFormat format 61 new SimpleDateFormat 34 yyyy MM dd 34 获得实体类 Calendar ca 61 Calendar getInstance 设置最后一天
  • idea自动生成UUID和解决办法

    正常情况下 xff0c 鼠标点击类名 xff0c Alt 43 Insert键就会出现生成UUID选项 xff0c 即 xff1a 有时候Alt 43 Insert没有UUID选项 xff0c 解决办法 第一种情况 xff1a Settin
  • 页面<div>位置调整

    调整页面 lt div gt 样式 给 lt div gt lt select gt 分别起名字 xff1a div2 xff0c s1 lt div gt 代码 xff1a lt div class 61 34 div2 34 style
  • 马士兵_JAVA自学之路(为那些目标模糊的码农们)

    转载自 xff1a https blog csdn net anlidengshiwei article details 42264301 JAVA自学之路 一 学会选择 为了就业 xff0c 不少同学参加各种各样的培训 决心做软件的 xf
  • 在深度学习中Softmax交叉熵损失函数的公式求导

    以下部分基本介绍转载于点击打开链接 在深度学习NN中的output层通常是一个分类输出 xff0c 对于多分类问题我们可以采用k 二元分类器来实现 xff0c 这里我们介绍softmax softmax回归中 xff0c 我们解决的是多分类
  • 1-基于ArUco码的标记与检测

    1 简介 姿态估计 xff08 Pose estimation xff09 在 计算机视觉领域扮演着十分重要的角色 xff1a 机器人导航 增强现实以及其它 这一过程的基础是找到现实世界和图像投影之间的对应点 这通常是很困难的一步 xff0
  • 4-基于ArUco相机姿态评估

    1 简介 基于ArUco评估相机姿态 xff0c 可以使用OPENCV的外部库 xff08 opencv contrib xff09 中的aruco模块 xff0c 可以参考安装目录 xff08 库目录 xff09 xff1a opencv
  • MySQL--40道基础概念选择题及答案

    一 单选题 xff08 题数 xff1a 40 xff0c 共 40 0 分 xff09 1 在计算机系统中能够实现对数据库资源进行统一管理和控制的是 xff08 A xff09 A DBMS B DBA C DBS D DBAS 2 数据
  • 抽象类方法——子类定义getDescription方法返回对一个人的简单描述

    Person与子类的关系图 每一个 人都有一些诸如名字这样的属性 xff0c 学生与雇员都有名字属性 xff0c 因此可以将getName方法放在位于继承关系较高层的通用超类 xff08 父类 xff09 中 xff0c 现在增加一个get
  • Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

    Uboot 所用版本 u boot 2013 01 u boot 2013 01 中有上千文件 xff0c 要想了解对于某款开发板 xff0c 使用哪些文件 哪些文件首先执行 可执行文件占用内存的情况 xff0c 最好的方法就是阅读它的Ma
  • Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结

    设备驱动程序是操作系统内核和机器硬件之间的接口 xff0c 由一组函数和一些私有数据组成 xff0c 是应用程序和硬件设备之间的桥梁 在应用程序看来 xff0c 硬件设备只是一个设备文件 xff0c 应用程序可以像操作普通文件一样对硬件设备
  • 路由器开发(一)—— 路由器硬件结构及软件体系

    一 路由器的硬件构成 路由器主要由以下几个部分组成 xff1a 输入 输出接口部分 包转发或交换结构部分 xff08 switching fabric xff09 路由计算或处理部分 如图所示 图1 路由器的基本组成 输入端口是物理链路和输
  • Linux 设备驱动开发思想 —— 驱动分层与驱动分离

    前面我们学习I2C USB SD驱动时 xff0c 有没有发现一个共性 xff0c 就是在驱动开发时 xff0c 每个驱动都分层三部分 xff0c 由上到下分别是 xff1a 1 XXX 设备驱动 2 XXX 核心层 3 XXX 主机控制器
  • C++ 学习基础篇(一)—— C++与C 的区别

    编程的学习学无止境 xff0c 只掌握一门语言是远远不够的 xff0c 现在我们开始C 43 43 的学习之路 xff0c 下面先看下C 43 43 与C 的区别 一 C 43 43 概述 1 发展历史 1980年 xff0c Bjarne
  • Linux 网络协议栈开发基础篇(七)—— 网桥br0

    一 桥接的概念 简单来说 xff0c 桥接就是把一台机器上的若干个网络接口 连接 起来 其结果是 xff0c 其中一个网口收到的报文会被复制给其他网口并发送出去 以使得网口之间的报文能够互相转发 交换机就是这样一个设备 xff0c 它有若干
  • 常用的18个免费论文文献网站,分享给大家

    1 掌桥科研 掌桥科研文献资源库涵盖中英文期刊 xff0c 会议 xff0c 报告等多种资源 xff0c 拥有1 2多亿文献资源 xff0c 值得一提的是 xff0c 它整合了目前国际上主流的英文文献数据库 xff0c 涵盖了诸如Sprin
  • 必备外文文献网站,有外文文献翻译功能

    国内好多同学面对外文文献论文都有一个共同的槽点 xff0c 那就是翻译的问题 xff0c 好不容易找到了自己想要的外文文献 xff0c 结果那长篇大论的专业术语看不懂 xff0c 还需另找软件翻译 xff0c 这确实太麻烦了 图片来自于网络
  • 国内常用的5个中文期刊论文网站,5个外文文献网站

    作为一名科研汪 xff0c 日常工作就是找资料 xff0c 查文献 xff0c 做实验 xff0c 现在我给大家分享10个中外文献论文网站 xff0c 助同僚们在日常中能节省一些时间 xff0c 能更快有效地找到自己需要的资料文献 5个中文
  • 能查阅国外文献的8个论文网站(最新整理)

    这几天又新发现了几个论文网站 xff0c 有用的话请拿走 xff01 1 CALIS公共目录检索系统 这里是 传送门 2 掌桥科研一站式服务平台 这里是 传送门 3 NSTL文献检索 这里是 传送门 4 CASHL目录系统 这里是 传送门
  • java里的自动装箱和自动拆箱

    所有的基本类型都有与之对应的类 xff0c 例如 xff1a int Integer byte Byte short Short long Long float Float double Double char Char boolean B