滚雪球学Java(07):自动装箱、自动拆箱,Java开发者必备技能

  咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  Java 是一种强类型语言,数据类型的转换是 Java 编程中最基本的操作之一。Java 中的基本类型转换、包装类、自动装箱和自动拆箱是 Java 编程中常用的操作。正确地应用这些知识点可以使程序的性能得到优化。

摘要

  本文将介绍 Java 中基本类型转换、包装类、自动装箱、自动拆箱的概念。我们将详细说明这些概念,并提供源代码和测试用例以帮助读者更好地理解和应用这些知识点。

正文

基本类型转换

  Java 中的基本类型转换是将一种基本数据类型转换为另一种基本数据类型的操作。Java 中的基本数据类型有 byte、short、int、long、float、double、char、boolean。

  类型转换主要有两种形式:自动类型转换和强制类型转换。

自动类型转换

  自动类型转换是指从一个小的类型转换为一个大的类型,比如将 byte 类型转换为 int 类型、将 short 类型转换为 long 类型、将 float 类型转换为 double 类型。

  自动类型转换是由编译器自动完成的,不需要程序员手动转换。在进行自动类型转换时,编译器将自动把小的类型转换为大的类型,不会丢失数据。

下面是一个自动类型转换的例子:

byte b = 10;
int i = b;      // 自动类型转换
System.out.println(i);

在上面的代码中,byte 类型的变量 b 被自动转换成了 int 类型的变量 i。

强制类型转换

  强制类型转换是指将一个大的类型转换为一个小的类型,比如将 int 类型转换为 byte 类型、将 double 类型转换为 float 类型、将 long 类型转换为 short 类型。

  强制类型转换需要程序员手动完成,并且会丢失数据。在进行强制类型转换时,需要使用圆括号将要转换的类型括起来。

下面是一个强制类型转换的例子:

int i = 100;
byte b = (byte) i;      // 强制类型转换
System.out.println(b);

  在上面的代码中,int 类型的变量 i 被强制转换成了 byte 类型的变量 b。

包装类

  Java 中的包装类是将基本数据类型封装成对象的类。Java 中的包装类有 Byte、Short、Integer、Long、Float、Double、Character、Boolean。

  使用包装类可以将基本类型转换成对象,这样可以使用对象的方法来访问变量和进行操作。

下面是一个使用包装类的例子:

Integer i = new Integer(100);
System.out.println(i.intValue());

  在上面的代码中,使用 Integer 包装类将 int 类型的 100 封装成对象 i,并使用其 intValue() 方法来访问 i 的值。

自动装箱和自动拆箱

  自动装箱和自动拆箱是 Java 5 引入的新特性。它们可以将基本类型和包装类之间进行自动转换。

自动装箱

  自动装箱是指将基本类型自动转换为包装类。当程序需要将基本类型的值赋给包装类对象时,编译器会自动将基本类型转换为包装类对象。这个过程也被称为自动封箱。

下面是一个自动装箱的例子:

Integer i = 100;      // 自动装箱
System.out.println(i);

  在上面的代码中,将 int 类型的 100 赋值给包装类 Integer 对象 i,编译器自动将 int 类型的值装箱为 Integer 对象。

自动拆箱

  自动拆箱是指将包装类自动转换为基本类型。当程序需要将包装类对象的值赋给基本类型时,编译器会自动将包装类对象转换为基本类型。这个过程也被称为自动拆箱。

下面是一个自动拆箱的例子:

Integer i = new Integer(100);
int j = i;       // 自动拆箱
System.out.println(j);

  在上面的代码中,将 Integer 对象 i 的值赋值给 int 类型的 j,编译器自动将 Integer 对象 i 拆箱为基本类型的 int。

代码演示

基本类型转换

代码示例
package com.demo.javase.day07;

/**
 * 基本类型转换
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:37
 */
public class TypeConversionExample {

    public static void main(String[] args) {
        // 自动类型转换
        byte b = 10;
        int i = b;
        System.out.println(i);

        // 强制类型转换
        int j = 100;
        byte k = (byte) j;
        System.out.println(k);
    }
}
代码解析

  这段代码演示了Java中的类型转换。首先,在第6行,将byte类型变量b的值赋给int类型变量i,这是一种自动类型转换,因为byte可以自动转换为int。接着,在第9行,将int类型变量j的值强制转换为byte类型变量k,这是一种强制类型转换,因为int不能自动转换为byte,需要使用强制转换符将类型进行转换。最后,分别打印i和k的值。本例输出结果为:

10
100

  其中,第一行输出i的值,为变量b的值10,这是因为将byte类型自动转换为int类型时,不会发生数据丢失。

  第二行输出k的值,为变量j的值100强制转换后的结果,为-100,这是因为byte的取值范围为-128到127,而将int类型的值100强制转换为byte类型时,超出了byte类型的取值范围,导致发生了数据溢出。

执行结果

在这里插入图片描述

包装类

代码示例
package com.demo.javase.day07;

/**
 * 包装类
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:38
 */
public class WrapperClassExample {

    public static void main(String[] args) {
        Integer i = new Integer(100);
        System.out.println(i.intValue());
    }
}
代码解析

  这段代码展示了如何使用 Integer 类型的包装类。其中,Integer 是一个类,它可以将一个基本类型的 int 值包装成一个对象。在这个例子中,我们创建了一个 Integer 对象 i,并使用它的 intValue() 方法获取它包装的 int 值(即 100),并将其打印到控制台上。这是一个简单的示例,展示了包装类的基本用法。

运行结果

在这里插入图片描述

自动装箱和自动拆箱

代码示例
package com.demo.javase.day07;

/**
 * 自动装箱和自动拆箱
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:41
 */
public class AutoBoxingExample {

    public static void main(String[] args) {
        // 自动装箱
        Integer i = 100;
        System.out.println(i);

        // 自动拆箱
        Integer j = new Integer(100);
        int k = j;
        System.out.println(k);
    }
}
代码解析

  该代码演示了 Java 中的自动装箱和自动拆箱。其中,自动装箱是指将基本类型自动转换为对应的包装类类型,而自动拆箱是指将包装类自动转换为对应的基本类型。

  在代码中,第一行通过将 int 类型的 100 自动装箱成了 Integer 类型的 i,然后输出了 i 的值。第四行将一个新建的 Integer 对象 j 自动拆箱成了 int 类型的 k,然后输出了 k 的值。

  通过这两个例子,我们可以看到 Java 中的自动装箱和自动拆箱可以让代码更加简洁易懂。

运行结果

在这里插入图片描述

代码方法介绍

基本类型转换

  • byteintint i = b;
  • intbytebyte k = (byte) j;

包装类

  • 创建一个 Integer 对象:Integer i = new Integer(100);
  • 调用 Integer 对象的 intValue() 方法:i.intValue();

自动装箱和自动拆箱

  • 自动装箱:Integer i = 100;
  • 自动拆箱:int k = j;

测试用例

测试代码

我们可以通过编写测试用例来验证代码的正确性。下面是一个测试用例的示例:

package com.demo.javase.day07;

/**
 * 自动装箱、自动拆箱等综合测试
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:42
 */
public class TypeConversionTest {

    public static void main(String[] args) {
        // 自动类型转换
        byte b = 10;
        int i = b;
        System.out.println(i);

        // 强制类型转换
        int j = 100;
        byte k = (byte) j;
        System.out.println(k);

        // 包装类
        Integer x = new Integer(100);
        System.out.println(x.intValue());

        // 自动装箱和自动拆箱
        Integer y = 100;
        int z = y;
        System.out.println(y.intValue());
        System.out.println(z);
    }
}

测试结果

在这里插入图片描述

测试代码解析

  该代码主要测试了Java中的类型转换、自动装箱和自动拆箱功能。

  首先定义了一个名为TypeConversionTest的类。在该类的main方法中,分别进行了以下测试:

  1. 自动类型转换

  定义一个byte类型的变量b,并赋值为10,然后将其赋值给一个int类型的变量i,这就是自动类型转换。最后输出i的值,结果为10。

  1. 强制类型转换

  定义一个int类型的变量j,并赋值为100,然后将其强制转换为byte类型,并赋值给一个byte类型的变量k。最后输出k的值,由于byte类型的取值范围为-128~127,而100不在此范围内,因此k的值为-100。

  1. 包装类

  定义一个Integer类型的变量x,赋值为100,并使用intValue()方法将其转换为int类型,然后输出其值,结果为100。

  1. 自动装箱和自动拆箱

  定义一个Integer类型的变量y,赋值为100,然后将其赋值给一个int类型的变量z,这就是自动拆箱。同时,将100赋值给y,这就是自动装箱。最后分别输出y的值和z的值,结果均为100。

  综上,该代码涵盖了Java中类型转换、自动装箱和自动拆箱等多种特性的测试。

  … …

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

  同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug菌¹

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值