【Java基础教程】(三十二)常用类库篇 · 第二讲:包装类 Wrapper Class——概念及用途, 自动装箱与拆箱,常用操作方法~

article/2025/8/30 8:29:42

Java基础教程之常用类库 · 包装类

  • 1️⃣ 概念
  • 2️⃣ 设计目的(作用)和用途
  • 3️⃣ 使用
    • 3.1 自动装箱与拆箱
    • 3.2 常用方法
    • 3.3 常用属性
    • 3.4 null和默认值
  • 4️⃣ 注意事项
  • 🌾 总结
  • 📑 本文源码下载地址

在这里插入图片描述

1️⃣ 概念

在Java编程中,包装类(Wrapper Class)是一种特殊的类,它们允许将基本数据类型包装(Wrap)成对象。每个原始数据类型都有对应的包装类,例如Integer对应整型,Double对应浮点型等。包装类提供了一些有用的方法和功能,方便我们操作和处理与原始数据类型相关的数据。

Java中的8个基本数据类型分别为booleanbyteshortintlongfloatdoublechar。每个基本数据类型都有相应的包装类,它们分别为:BooleanByteShortIntegerLongFloatDoubleCharacter

包装类是不可变的,即创建后不能修改其值。它们的对象可以通过构造函数或静态工厂方法来创建,并且提供了许多方法用于转换、比较和操作基本数据类型的值。

2️⃣ 设计目的(作用)和用途

包装类主要有以下几个设计目的和用途:

  • 将原始数据类型转化为对象类型: 用于支持面向对象编程。原始数据类型(如int、float等)在Java中是不具备面向对象特性的,不能直接作为对象在方法中传递或进行其他操作。包装类为每种原始数据类型提供了一个对应的对象类型,使得原始数据类型可以以对象的形式进行操作;

  • 实现与原始数据类型相关的功能: 包装类提供了一系列的方法,用于对原始数据类型及其对象进行常见操作,如转换、比较、计算等。这些方法往往在编程过程中非常有用,并且方便使用;

  • 泛型支持: 在需要引用类型而基本数据类型不可用的情况下使用。泛型只能接受引用类型作为参数,而不能直接使用原始数据类型。通过使用包装类,我们可以将原始数据类型作为对象传递给泛型类或方法;

  • null值表示缺失或特殊状态: 对于原始数据类型,没有办法表示一个缺失的值或特殊状态,因为它们是值类型而不是引用类型。包装类通过提供null值来表示缺失的值或特殊状态,例如在数据库中查询到的结果为空。

总之,包装类的设计使得原始数据类型可以以对象的形式出现,并提供了一些常用方法和功能来处理、操作和表示与原始数据类型相关的数据。

3️⃣ 使用

3.1 自动装箱与拆箱

在Java中,自动装箱(Autoboxing)指的是自动地将基本数据类型转换为对应的包装类对象;自动拆箱(Unboxing)则是将包装类对象自动转换为基本数据类型。

下面是一个简单的示例,展示了如何使用自动装箱与拆箱:

public class BoxingDemo {public static void main(String[] args) {// 自动装箱Integer num1 = 10; // 等价于 下面这行代码Integer num2 = Integer.valueOf(10);// 自动拆箱int num3 = num1; // 等价于 下面这行代码int num4 = num1.intValue();System.out.println(num1 == num2);System.out.println(num1.equals(num2));System.out.println(num3 == num4);}
}

在程序中,Integer num1 = 10; 这行代码,整数10被自动装箱成一个Integer对象,并赋值给变量num1。实际上,这行代码等价于 Integer num2 = Integer.valueOf(10); 使用了包装类的valueOf方法手动进行装箱。

int num3 = num1; 这行代码中,num1表示的Integer对象被自动拆箱为对应的基本数据类型int并赋值给num3。实际上,这行代码等价于 int num4 = num1.intValue(); 手动调用intValue方法进行拆箱。

接下来的三个输出语句用于比较两个对象的引用和值是否相等:

  • System.out.println(num1 == num2); 检查num1num2是否引用同一个对象。由于装箱操作时会缓存一定范围内的包装类对象,所以当数值范围在-128到127之间时,两个引用将指向同一个对象,输出结果为true。对于其他数值范围,不同的装箱操作将创建新的对象,输出结果为false
  • System.out.println(num1.equals(num2)); 使用equals方法检查num1num2的值是否相等。无论数值范围如何,此比较都会比较对象存储的数值,输出结果为true
  • System.out.println(num3 == num4); 检查num3num4的值是否相等。由于拆箱操作直接比较基本数据类型的值,输出结果为true

输出结果:

true
true
true

3.2 常用方法

包装类中的常见方法如下:

  • XXXValue() 方法:将包装类对象转换为相应的基本数据类型;
  • parseXXX(String s) 方法:将字符串转换为相应的基本数据类型;
  • toString() 方法:将包装类对象转换为字符串形式;
  • equals() 方法:比较两个包装类对象是否相等;
  • compare()方法:比较两个包装类对象的大小关系。若第一个对象小于第二个对象,则返回一个负数;若两个对象相等,则返回0;若第一个对象大于第二个对象,则返回一个正数;
  • valueOf() 方法:返回一个包含指定值的包装类对象。该方法是装箱的一种方式。

下面是一个简单的示例,展示了如何使用包装类中的这些常见方法:

public class MethodDemo {public static void main(String[] args) {// 使用intValue()方法将Integer转为intInteger number1 = new Integer(10);int value1 = number1.intValue();System.out.println("intValue(): " + value1);// 使用parseInt()方法将字符串转为intString str = "20";int value2 = Integer.parseInt(str);System.out.println("parseInt(): " + value2);// 使用toString()方法将int转为字符串int number3 = 30;String str2 = Integer.toString(number3);System.out.println("toString(): " + str2);// 使用equals()方法比较两个Integer对象是否相等Integer number4 = new Integer(40);Integer number5 = new Integer(40);boolean isEqual = number4.equals(number5);System.out.println("equals(): " + isEqual);// 使用compare()方法比较两个int值的大小int value3 = 50;int value4 = 60;int result = Integer.compare(value3, value4);System.out.println("compare(): " + result);// 使用valueOf()方法将int转为Integer对象int number6 = 70;Integer value5 = Integer.valueOf(number6);System.out.println("valueOf(): " + value5);}
}

输出结果:

intValue(): 10
parseInt(): 20
toString(): 30
equals(): true
compare(): -1
valueOf(): 70

3.3 常用属性

除了上述通用方法,每个包装类还提供了特定类型的方法和属性:

  • Integer类:
    • MAX_VALUE:表示整型的最大值;
    • MIN_VALUE:表示整型的最小值;
    • SIZE:表示整型的位数;
    • TYPE:表示数据类型的Class对象。
  • Double类:
    • MAX_VALUE:表示双精度浮点型的最大值;
    • MIN_VALUE:表示双精度浮点型的最小值;
    • NaN:表示非数字值;
    • POSITIVE_INFINITY:表示正无穷大;
    • NEGATIVE_INFINITY:表示负无穷大。
  • Character类:
    • MIN_VALUE:表示字符型的最小值;
    • MAX_VALUE:表示字符型的最大值;
    • TYPE:表示数据类型的Class对象。
  • Boolean类:
    • TRUE:表示真值;
    • FALSE:表示假值。

以上只是列举了常用的属性字段,并不是全部。每个包装类还提供其他方法和属性,具体可以参考相关文档及源码或查阅Java API文档以获得更详细的信息。

3.4 null和默认值

包装类可以具有null值,表示没有有效的值。这在需要处理可能不存在的值时非常有用。如果没有给包装类对象赋初始值,则它的默认值为null

下面是一个简单的示例,展示了包装类中的初始默认值:

public class DefaultValueDemo {public static void main(String[] args) {Integer num = null;System.out.println(num);Integer num2 = new Integer("1");System.out.println(num2);}
}
  • Integer num = null;: 这行代码声明了一个名为numInteger类型变量,并将其初始化为nullnull表示该变量当前不引用任何对象。
  • Integer num2 = new Integer("1");: 这行代码创建了一个名为num2Integer类型变量,并使用字符串"1"作为初始值来实例化它。通过将字符串转换为对应的整数值,num2将被赋值为整数1。

输出结果:

null
1

4️⃣ 注意事项

自动装箱与拆箱带来的性能问题: 虽然自动装箱和拆箱提供了简洁的代码,但在性能方面需要谨慎。由于装箱和拆箱操作涉及创建对象和类型转换,会带来额外的开销。因此,在处理大量数据时,使用基本数据类型可能更高效。

要规避包装类自动装箱和拆箱的性能问题,可以考虑以下几种方法:

  • 显式使用基本数据类型:尽量使用基本数据类型而不是对应的包装类。这样可以避免自动装箱和拆箱的开销;
  • 使用静态工厂方法创建包装类实例:在必须使用包装类时,可以使用静态工厂方法(如Integer.valueOf(int))来创建包装类的实例。静态工厂方法会经过一定的缓存优化,可以重用已有对象,减少对象的创建和销毁;
  • 使用原始类型数组:如果需要存储大量的基本数据类型,可以使用原始类型数组而不是包装类数组。原始类型数组效率更高,因为它们不会涉及到装箱和拆箱的操作;
  • 避免使用包装类进行运算: 避免使用包装类进行大量的数学运算,特别是在循环中进行运算。相比之下,使用基本数据类型可以获得更好的性能;
  • 使用第三方库:如果性能问题是严重的,可以考虑使用第三方库,如Trove或FastUtil,它们提供了基于原始类型的高性能集合类。

需要注意的是,自动装箱和拆箱的性能问题通常在处理大量数据时才会显著影响性能。对于一般的应用程序,这些性能差异可能不太明显,在编写代码时应根据具体情况权衡性能和可读性。

🌾 总结

总的来说,Java的包装类提供了将基本数据类型转换为对象的机制,并且提供了一些有用的方法和属性来处理这些封装后的值。这些包装类在编程中经常被使用,特别是在集合类框架和需要处理基本数据类型的情况下。

可以说包装类是一种强大的工具,它们在处理基本数据类型时提供了更多的灵活性和功能。掌握包装类及其相关知识对于开发Java应用程序非常重要,尤其是在处理用户输入、数据库操作和集合框架等方面。

但同时,在使用包装类时,需要注意自动装箱和拆箱带来的性能方面的问题,因为装箱和拆箱操作涉及创建对象和类型转换,会带来额外的开销。

📑 本文源码下载地址

Java语言 包装类讲解案例代码 ( 设计目的(作用)和用途、自动装箱与拆箱、常用方法、 null和默认值)

在这里插入图片描述


温习回顾上一篇(点击跳转)《【Java基础教程】(三十一)常用类库篇 · 第一讲:Optional类——解锁Java的Optional操作,消灭那些隐匿的空指针,还程序世界一个安稳!~》

继续阅读下一篇(点击跳转)《【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~》


http://chatgpt.dhexx.cn/article/QecUZ97P.shtml

相关文章

java基础教程01讲:使用idea写第一个java程序

1、使用idea创建一个java、web项目,新安装的idea,第一次,打开如图下面的界面 选择第一个 2、如果不是第一次打开,就我们选择new---》project 3、点击下一步 再点击下一步 4、project name写项目名称、project location是代码存放…

grpc java 基础教程

1 RPC 框架原理RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者&a…

【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳 ~

Java学习路线攻略导图 上篇 前言1、入门介绍篇2、程序基础概念篇3、包及访问权限篇4、异常处理篇5、特别篇6、面向对象篇7、新特性篇8、常用类库篇9、多线程篇10、IO篇11、网络编程篇12、集合体系篇13、JDBC篇 前言 🍺🍺 各位读者朋友大家好&#xff01…

idea java 单元测试_Java基础教程:IDEA单元测试

Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件。 安装JUnit插件步骤 File-->settings-->Plguins-->Browse repositories-->输入JUnit-->选择JUnit Generator V2.0安装。 安装完成后需要重新启动…

【Java基础教程】标识符与关键字

✅作者简介:大家好我是hacker707,大家可以叫我hacker 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java基础教程 💬推荐一款模拟面试、刷题神器👉点击跳转进入网站 标识符与关键字 标识符关键字…

【Java基础教程】用Java实现猜数字小游戏

✅作者简介:大家好我是hacker707,大家可以叫我hacker 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java基础教程 💬推荐一款模拟面试、刷题神器👉点击跳转进入网站 🏆在本周获得了新…

【Java基础教程】详解Java三种流程控制语句

✅作者简介:大家好我是hacker707,大家可以叫我hacker,新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java基础教程 💬推荐一款模拟面试、刷题神器👉点…

java基础教程:集合概述(27)

今天要讲的内容是集合。集合是我们编程时非常频繁的对象,必须花费大量时间学习。 我们还是从是什么和为什么两个角度进行引入。 集合是什么? 集合是存储和操作一组对象的对象。类似一个池子,可以存储操作一组元素。 为什么要有集合&#xf…

Java 零基础教程,看完就会,建议收藏

如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 。 让我们出发吧!ps:本文有点长,耐心阅读 。 〇,编程环境 工程项目推荐使…

找呀找呀找地铁

杭州地铁1号线据说2010年开通,还好下沙那边有地铁站,刚好在单位门口,不然在城区和这个鸟不生蛋的地方两头跑,可怎么活啊? 谁要以前不好好努力,多捞点钱呢?真是“老大徒伤悲”啊!这个…

转载-高仙机器人落地北京杭州深圳多个城市地铁

你知道吗?世界上第一条地铁始建于1863年的伦敦,中国的地铁时代则在1969年的北京开启。 地铁作为黄金动脉,是衡量城市发展的关键指标之一。地铁不仅可以减少城市交通道路拥堵,带动周边地区发展,还可以减少环境污染&…

我国首个5G地铁站开通:TCL集团重组方案通过;苹果2019新品图泄露|雷锋早报...

我国首个5G地铁站在成都开通 近日,成都市政府新闻办发布消息称,全国首个5G地铁站(地铁10号线太平园站)已于1月5日在成都正式开通,该地铁站是全国第一个覆盖5G信号的地铁站,将成为四川移动对5G室内分布系统…

杭州治堵有“智慧” 阿里云数加激活城市大脑

城市车辆逐年增长,道路通行关系市民生活,也考验城市管理者智慧。除了加大基础设施投入,杭州对大数据的分析和应用成为治堵新发力点。在路网规划、精确治堵、科学调配资源等方面,都能看到“城市大脑”和大数据发挥的“智慧”作用。…

地铁一公里造价达7亿元,大部分城市无法回本,为何还抢着建?

最近几年我国各大城市兴起了一股地铁热,不管是大城市还是小城市,只要稍微符合条件的,很多城市都在纷纷规划建设地铁,目前包括已经有地铁在运营以及规划建设地铁的城市达到70个以上。 但是我们都知道,建地铁的成本是非常…

支付宝教会魔都地铁刷脸、扫码、懂人话

文/图 电商在线 朱婷 上午9点,小邵带着女朋友踏上了上海游玩的旅途。能顺利通过拥挤的地铁,是他们来到上海的第一个小愿望。 “我试一下宣传板上那个二维码。”看着高峰期买票的队伍,小邵不想让女朋友刚到,就在地铁口“罚站”。扫…

地铁与日本移动互联网

如果说中国的春运是每年全世界最大规模的人口迁徙,那么日本东京的上下班时间可能就是全球每天在发生的最大规模人口迁徙。 每天早上,日本人穿着整齐的西装,脚穿擦着发亮的皮鞋,提着公文包,整齐划一地挤上各种轨道交通工…

新华三:让地铁更智慧

当前,我国轨道交通正处于黄金发展期。国家发改委、交通运输部联合印发的《交通基础设施重大工程建设三年行动计划》指出:2016-2018年重点推进103个城市轨道交通项目前期工作,新建城市轨道交通2000公里以上,涉及投资约1.6万亿元。而…

云开发地铁路线图小程序源码和配置教程

☑️ 编号:ym415 ☑️ 品牌:无 ☑️ 语言:小程序 ☑️ 大小:580KB ☑️ 类型:地铁路线图 ☑️ 支持:小程序 🎉 欢迎关注(发消息才不限制),私信,领取 🎉 ✨ 源…

地铁规划

交通强国,铁路先行; 市域交通,得看地铁; 1.杭州篇 2.济南篇 3.上海篇 4.敬请期待1.杭州篇(未完成) “欲把西湖比西子,淡妆浓抹总相宜;” 杭州地铁一号线是浙江省第一条建成运营的地…

杭州城市交通拥堵综合治理实践

来源:世纪交通网 随着城镇化、机动化快速发展,杭州同国内许多城市一样,交通拥堵日益突出,已影响城市环境、运行效率及居民宜居感受。杭州自2013 年根据浙江省委省政府统一部署开始系统开展交通拥堵治理相关工作,经过多…