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

简介: 【2月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

在这里插入图片描述


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


@[toc]

前言

  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中类型转换、自动装箱和自动拆箱等多种特性的测试。

附录源码

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

小结

  本文主要介绍了 Java 中基本类型转换、包装类、自动装箱和自动拆箱的概念。我们详细说明了这些概念,并提供了源代码和测试用例以帮助读者更好地理解和应用这些知识点。我们也可以通过编写测试用例来验证代码的正确性。掌握这些知识点可以使 Java 程序的性能得到优化。

总结

  Java 中的数据类型转换是非常常见的操作,基本类型转换包括自动类型转换和强制类型转换。自动类型转换就是将一个小的类型转换为一个大的类型,可以由编译器自动完成。强制类型转换则需要程序员手动完成,大小类型之间转换可能会存在数据丢失的情况。

  在 Java 中,还有包装类的概念,将基本数据类型封装成对象的类。自动装箱和自动拆箱是 Java 5 引入的新特性,作用是将基本类型和包装类之间进行自动转换,方便了开发人员操作。自动装箱是将基本类型自动转换为包装类,自动拆箱则是将包装类自动转换为基本类型。

  正确应用这些知识点可以使程序的性能得到优化,提高程序员开发效率。需要注意的是,在进行类型转换时,一定要注意数据是否会丢失,并小心异常情况的处理。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

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


目录
相关文章
|
18天前
|
Java C# 开发者
【干货】Java开发者快速上手.NET指南
【干货】Java开发者快速上手.NET指南
|
1月前
|
存储 Java 测试技术
滚雪球学Java(08):深入理解Java变量、常量及其作用域
【2月更文挑战第14天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
93 0
|
1月前
|
Java 编译器
Java中的自动装箱和拆箱
Java中的自动装箱和拆箱
|
1月前
|
IDE Java 编译器
滚雪球学Java(02):入门Java必学 | 环境配置详细教程
【2月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
56 3
|
1月前
|
Java 编译器 测试技术
滚雪球学Java(03):你知道JDK、JRE和JVM的不同吗?看这里就够了!
【2月更文挑战第12天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
105 4
|
3天前
|
存储 安全 Java
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
【4月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 4
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
|
8天前
|
Java 测试技术 索引
滚雪球学Java(15):节约时间,提升效率:掌握JavaSE-while循环语句的技巧与窍门
【4月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 3
滚雪球学Java(15):节约时间,提升效率:掌握JavaSE-while循环语句的技巧与窍门
|
9天前
|
Java 测试技术 索引
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
【4月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
26 1
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
|
10天前
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
24 0
|
1月前
|
Java 程序员 C#
静态构造方法解析,Java新手必看技能
静态构造方法解析,Java新手必看技能
9 0