【java基础】包装类,自动装箱和自动拆箱

2023-11-16

基本介绍

有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。
例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些包装器类有显而易见的名字:Integer、Long、Float、Double、Short、Byte、Character和Boolean(前6个类派生于公共的超类number)。

包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,包装器类还是final,因此不能派生它们的子类。

包装类

每个基本数据类型都对应一个包装类,名称就是首字母大小。包装类是一个类,所以拥有许多方法,我们可以利用这些方法很任意的对数据进行操作,下面以Interger进行举例

The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.
In addition, this class provides several methods for converting an int to a String and a String to an int, as well as other constants and methods useful when dealing with an int.

上面就是Interger类上的注释,就表示Integer就是包含了int值的对象,提供了一些int->String和String->int 的方法

    public static void main(String[] args) {
        int num = Integer.parseInt("111", 2);
        System.out.println(num); // 输出7
    }

上面就是一个例子,我们可以利用Integer的静态方法parseInt将字符串转换为int,还可以指定进制。
对于创建Integer对象,有2种方法,如下

        // 通过构造器创建
        Integer integer1 = new Integer(7);
        //通过静态方法valueOf创建
        Integer integer2 = Integer.valueOf(8);

创建了Integer对象后就可以使用一系列的方法了
在这里插入图片描述

具体使用方法参考api文档,对于其他几个包装类使用方法类似

自动装箱

自动装箱就是在需要的时候,基本数据类型会自动被装配成为对应的包装类,这里还是使用int和Integer进行举例

        Integer a = 1;

上面代码我们直接将基本数据类型赋值给了一个类,按理来说,这个代码应该报错,事实上,上面代码并不会报错,就是因为自动装箱机制。上面代码等价于下面代码

        Integer a = Integer.valueOf(1);

对于int来说,自动装箱就是在有需要的时候就会自动被装配为Integer

自动拆箱

自动拆箱就是自动装箱的逆过程,在需要的时候,包装类会被自动转换为对应的基本数据类型,还是使用int和Integer进行举例

        Integer a = new Integer(1);
        a++;
        System.out.println(a);

上面的代码我们使用对对象使用了++运算符,这是不运行的,但是由于自动拆箱机制,在执行a++这行代码时,会将a转换为int,然后再执行++操作,然后再转换回Integer。等价于下面代码

        Integer a = new Integer(1);
        int b = a.intValue();
        b++;
        a = Integer.valueOf(b);
        System.out.println(a);

包装类注意事项

包装类比较

我们对包装类的比较不要使用2个等号来进行比较,因为对象使用 == 比较的是地址,例如下面代码

        Integer a = 10000;
        Integer b = 10000;
        System.out.println(a == b); // 输出false

我们应当使用 a.equals(b)来进行比较

        Integer a = 10000;
        Integer b = 10000;
        System.out.println(a.equals(b)); // 输出true

对于自动装箱有一些注意事项如下

自动装箱规范要求boolean、byte、chars127,介于-128和127之间的short和int
被包装到固定的对象中。例如,如果在前面的例子中将a和b初始化为100,那么它们
的比较结果一定成功。

我们将上面代码中的a和b改成100,那么使用==比较将会输出true

        Integer a = 100;
        Integer b = 100;
        System.out.println(a == b); // 输出true

应为对于Integer,值为-128 – 127的Integer对象已经创建了缓存起来了,构建Integer对象时不会创建新的对象,具体内容参考Integer里面的IntegerCache类
在这里插入图片描述

包装器内容不可变

还是使用Integer进行举例,只要我们在构建Integer后,那么Integer的值就已经不能够改变了,应为Integer里面的值是使用final进行修饰的
在这里插入图片描述

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

【java基础】包装类,自动装箱和自动拆箱 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • BZOJ4868 [Shoi2017]期末考试

    YY一下的话感觉代价关于最晚出分时间是一个单峰函数 三分最晚的出分时间 然后贪心一下算代价就行 如果A gt B就只用B就行了 要不然的话出分时间小于当前限制的都可以随便往后调直到到达限制 那么先尽量用A 调不到限制以内的再用B即可 inc
  • 提升Python代码性能的六个技巧

    文章目录 前言 为什么要写本文 1 代码性能检测 1 1 使用 timeit 库 1 2 使用 memory profiler 库 1 3 使用 line profiler 库 2 使用内置函数和库 3 使用内插字符串 f string 4
  • 关于 DEBUG到ps.executeUpdate();这一步不执行的问题

    20191008 今天下午在公司debug的时候 发现两个表的一直走到SQL执行那一层的时候不往下执行了 原因是这两个表我再用PLSQL进行查询的时候用了select from xxx for update语句 然后没有commit 导致表
  • Yii2安装与基本应用记录

    前面陆续实验了laravel和CI平台 安装部署与应用 今天咱们再尝试一下yii平台 听说yii平台可以通过程序配置后 自动生成功能代码 很值得启动 不说废话 走起 首先是安装 yii的安装比较简单 不需要很复杂的其它附带的东西 只需要Co
  • 删除链表元素详解版(Java)

    目录 题目 1 一般方法 2 虚拟头节点法 3 递归法 题目 Leetcode203题 移除链表元素 给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node val val 的节点 并返回 新的头节点 1 一般
  • 大数据毕业设计题目分享 毕设开题选题

    文章目录 0 前言 1 如何选题 1 1 选题技巧 如何避坑 重中之重 1 2 为什么这么说呢 1 3 难度把控 1 4 题目名称 1 5 最后 2 大数据 选题推荐 2 1 大数据挖掘类 2 2 大数据处理 云计算 区块链 毕设选题 2
  • Anaconda清华镜像--安装、配置与使用

    文章目录 1 Anaconda下载安装 1 1 下载地址 1 2 安装 2 配置清华镜像源 3 测试使用 4 未找到的模块 1 Anaconda下载安装 1 1 下载地址 清华镜像 https mirrors tuna tsinghua e
  • 差异范围柱状图

    图形效果 在这里插入图片描述 数据 程序 setwd C Users Think Desktop 项目 相关R包载入 library ggplot2 library dplyr library cols4all library patchw
  • VS Code 安装方法

    1 安装控制台程序 NET SDK 功能 应用能够正常的运行和构建 NET SDK下载地址 下载 NET Linux macOS 和 Windows 2 安装驱动编辑器vscode vscode下载地址 https code visuals
  • 配置ssd为缓存_结合群辉420+的存储配置,聊聊NAS硬盘该如何选

    最近几年随着大家拍照 拍视频的需求越来越强 手机容量一直水涨船高 从几年前64G就算 海量存储 到现在 256G是主流 512G不嫌多 很多小伙伴都感叹因为视频需求 手机的存储容量永远不够用 大量的视频文件 也就意味着传统的文件管理系统也继
  • 从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4

    前面文章链接如下 从0实现基于Linux socket聊天室 多线程服务器模型 1 从0实现基于Linux socket聊天室 多线程服务器一个很隐晦的错误 2 从0实现基于Linux socket聊天室 实现聊天室的登录 注册功能 3 上
  • C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写 意为内存复制 在写C语言程序的时候 我们常常会用到它 它的函原型如下 void memcpy void dest const void src size t n 它的功能是从src的开始位置
  • GC垃圾回收机制

    GC垃圾回收机制 一 GC原理 1 为什么进行垃圾回收 二 JVM与回收算法 1 内存分配 2 回收算法 1 标记 清除 Mark sweep 2 复制 Copying 3 标记 整理 Mark Compact 4 分代收集算法 1 新生代
  • 高手思考问题的底层逻辑究竟是什么?

    花半秒钟就看透事物本质的人 和花一辈子都看不清事物本质的人 注定是截然不同的命运 01 人类是如何认识世界的 我们用视觉 听觉 味觉 嗅觉 触觉来感知这个世界 对一些现象习以为常 也许你从来没有思考过 光真的是五颜六色的吗 水果的味道真是甜
  • org.hibernate.HibernateException: Unable to make JDBC Connection

    部分错误日志 java lang UnsupportedOperationException The application must supply JDBC connections
  • Python爬虫之入门保姆级教程,学不会我去你家刷厕所

    今天这个教程采用最简单的爬虫方法 适合小白新手入门 代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法 适合小白新手入门 代码不复杂 首先打开咋们的网站 一 导入相关库 requests库 二 相关的参数 url headers 三 向
  • 解决Mac安装LightGBM报错LightGBM and gcc 8 in MacOS: Library not loaded

    Github Issue上有一个解决方法 但是博主失败了 https github com Microsoft LightGBM issues 1369 以下是我的解决方法 博主解决方法 首先卸载 pip uninstall lightgb
  • 帝国CMS微信小程序服务器端接口API

    帝国CMS微信小程序服务器端接口API 100个左右接口详细请看 https www guiboweb com wxapi html 使用说明 使用示例 demo 安全验证 security 新闻模型 新闻列表与搜索 list 新闻内容 a
  • QT 设置窗口阴影,设置窗口圆角

    QT开发过程中 添加过自定义标题栏后 因为设置了 setWindowFlags Qt FramelessWindowHint 属性 widget界面后面阴影没有了 现在使用paint的方法绘制阴影和窗口圆角 一方面能设置阴影 一方面可解决设
  • 【java基础】包装类,自动装箱和自动拆箱

    文章目录 基本介绍 包装类 自动装箱 自动拆箱 包装类注意事项 包装类比较 包装器内容不可变 基本介绍 有时 需要将int这样的基本类型转换为对象 所有的基本类型都有一个与之对应的类 例如 Integer类对应基本类型int 通常 这些类称