java中的包装类

1、包装类

相信各位小伙伴们对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

基本类型和包装类之间的对应关系:

在这里插入图片描述
包装类主要提供了两大类方法:

  1. 将本类型和其他基本类型进行转换的方法

  2. 将字符串和本类型及包装类互相转换的方法

Integer包方法的构造方法
在这里插入图片描述
如下代码所示:
在这里插入图片描述
Integer包装类的常用方法:
在这里插入图片描述

2、基本类型和包装类之间的转换

基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦):
在这里插入图片描述

在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
在这里插入图片描述
拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱
在这里插入图片描述

3、基本类型和字符串之间的转换

在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。

其中,基本类型转换为字符串有三种方法:

  1. 使用包装类的 toString() 方法

  2. 使用String类的 valueOf() 方法

  3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串

在这里插入图片描述

再来看,将字符串转换成基本类型有两种方法:

  1. 调用包装类的 parseXxx 静态方法

  2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
    在这里插入图片描述

4、使用 Date 和 SimpleDateFormat 类表示时间

在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用:
在这里插入图片描述
使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:
在这里插入图片描述
其中, Wed 代表 Wednesday (星期三), Jun 代表 June (六月), 11 代表 11 号, CST 代表 China Standard Time (中国标准时间,也就是北京时间,东八区)。

从上面的输出结果中,我们发现,默认的时间格式不是很友好,与我们日常看到的日期格式不太一样,如果想要按指定的格式进行显示,如 2014-06-11 09:22:30 ,那该怎么做呢?

此时就到了 java.text 包中的 SimpleDateFormat 类大显身手的时候了!!可以使用 SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。

  1. 使用 format() 方法将日期转换为指定格式的文本

在这里插入图片描述
代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。

运行结果: 2014-06-11 09:55:48
2. 使用 parse() 方法将文本转换为日期
在这里插入图片描述
代码中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,调用 parse() 方法将文本转换为日期。

运行结果: 在这里插入图片描述
注意:

1、 调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理

2、 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包

5、Calendar 类的应用

Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。

java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();

那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:
在这里插入图片描述
其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。

运行结果:
在这里插入图片描述
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:
在这里插入图片描述
运行结果:
在这里插入图片描述

<think>嗯,用户想了解Java包装的作用和使用场景。首先,我需要回忆一下包装的基本概念。包装,比如Integer、Double这些,对应基本型int、double,把基本型变成对象。那为什么要这么做呢?可能是在需要对象的时候,比如集合只能存储对象,不能存基本型。这时候就需要用包装了。 然后,用户的问题还包括使用场景,得具体说明哪些情况下必须用包装。比如集合框架,泛型,还有数据库操作的时候,字段可能为null,这时候用基本型就不行,只能用包装。另外,包装还提供了很多方法,比如转换方法,比如Integer.parseInt(),这些功能也是基本型没有的。 还要注意自动装箱和拆箱的机制,这会影响性能。比如频繁的装箱拆箱可能会有性能损耗,这时候可能需要权衡使用基本型还是包装。比如在循环里大量使用包装可能不太好,但如果是偶尔使用,可能影响不大。 引用里的资料提到,在POJO中属性用包装,RPC方法的参数和返回值用包装,而局部变量用基本型。这点需要解释清楚,为什么POJO要用包装?因为POJO可能对应数据库的字段,数据库里的字段可能为null,用基本型无法表示null,会导致问题。而RPC方法可能需要传递可能为null的值,所以用包装更合适。 另外,缓存机制,比如Integer的-128到127的缓存,这个可能影响比较操作,比如用==比较的时候可能会有意外结果,应该用equals方法。这点也需要提到,作为使用时的注意事项。 还要提到包装的方法,比如型转换、进制转换、最大值最小值常量,这些方法给开发者提供了便利,不用自己实现。 总结一下,包装的作用主要是让基本型可以以对象形式使用,适用于集合、泛型、数据库映射、允许null值的场景。而基本型在性能敏感、不需要对象的情况下使用,比如局部变量。 可能用户作为初学者,可能对自动装箱拆箱不太熟悉,需要简单说明一下。比如自动装箱就是自动把int转成Integer,拆箱反之。但要注意null拆箱会抛出NullPointerException,所以在使用包装时要避免这种情况。 最后,确保回答结构清晰,分点说明作用和场景,并引用相关的资料来支持观点。比如引用[1]提到包装允许基本型当对象处理,引用[4]提到POJO和RPC中使用包装。这些引用需要自然地融入回答中,作为论据。</think>### Java包装的作用及使用场景 #### 一、包装的作用 1. **对象化基本型** 包装(如$Integer$, $Double$, $Boolean$)将基本型(如$int$, $double$, $boolean$)封装为对象,使其可以用于需要对象操作的场景,例如集合、泛型等[^3][^4]。 2. **支持`null`值** 基本型不能赋值为`null`,而包装可以表示缺失值或无效状态,适用于数据库字段映射或可选参数场景。 3. **提供工具方法** 包装内置了型转换、进制转换、最大值/最小值常量等方法。例如: - $Integer.parseInt("123")$ - $Integer.toHexString(255)$[^1][^3]。 4. **实现自动装箱与拆箱** Java支持基本型与包装的自动转换(装箱:$int \rightarrow Integer$;拆箱:$Integer \rightarrow int$),简化代码编写[^4]。 #### 二、使用场景 1. **集合与泛型** 集合(如$List$, $Map$)和泛型仅支持对象型,必须使用包装。 例如: ```java List<Integer> list = new ArrayList<>(); // 必须用Integer而非int ``` 2. **数据库实体(POJO)** 数据库字段可能为`null`,POJO的属性需定义为包装以兼容空值。 例如: ```java public class User { private Integer age; // 允许age为null } ``` 3. **RPC方法参数与返回值** 远程方法调用(RPC)中,参数和返回值需支持`null`或未初始化状态,优先使用包装。 4. **需要对象操作的场景** 例如反射、序列化、多态等依赖对象特性的操作。 #### 三、注意事项 1. **性能权衡** 频繁装箱/拆箱可能影响性能,在循环或高性能场景中优先使用基本型。 2. **比较操作** 包装需用$equals()$比较值,而非`==`(`==`比较对象地址)。 例如: ```java Integer a = 200; Integer b = 200; System.out.println(a.equals(b)); // true System.out.println(a == b); // false(超出缓存范围) ``` 3. **缓存机制** $Integer$对-128到127的值有缓存优化,直接复用对象,此范围内`==`可能返回true。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值