前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >滚雪球学Java(07):自动装箱、自动拆箱,Java开发者必备技能

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

原创
作者头像
bug菌
发布2024-04-25 21:26:06
1010
发布2024-04-25 21:26:06
举报
文章被收录于专栏:滚雪球学Java滚雪球学Java

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~

代码语言:js
复制
环境说明: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 类型。

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

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

代码语言:java
复制
byte b = 10;
int i = b;      // 自动类型转换
System.out.println(i);

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

强制类型转换

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

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

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

代码语言:java
复制
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。

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

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

代码语言:java
复制
Integer i = new Integer(100);
System.out.println(i.intValue());

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

自动装箱和自动拆箱

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

自动装箱

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

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

代码语言:java
复制
Integer i = 100;      // 自动装箱
System.out.println(i);

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

自动拆箱

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

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

代码语言:java
复制
Integer i = new Integer(100);
int j = i;       // 自动拆箱
System.out.println(j);

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

代码演示

基本类型转换

代码示例
代码语言:java
复制
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的值。本例输出结果为:

代码语言:java
复制
10
100

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

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

执行结果

包装类

代码示例
代码语言:java
复制
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),并将其打印到控制台上。这是一个简单的示例,展示了包装类的基本用法。

运行结果

自动装箱和自动拆箱

代码示例
代码语言:java
复制
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;

测试用例

测试代码

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

代码语言:java
复制
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 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

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

☀️建议/推荐你

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

  码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。   同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

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


--End

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • 正文
    • 基本类型转换
      • 自动类型转换
      • 强制类型转换
    • 包装类
      • 自动装箱和自动拆箱
        • 自动装箱
        • 自动拆箱
      • 代码演示
        • 基本类型转换
        • 包装类
        • 自动装箱和自动拆箱
      • 代码方法介绍
        • 基本类型转换
        • 包装类
        • 自动装箱和自动拆箱
      • 测试用例
        • 测试代码
        • 测试结果
        • 测试代码解析
    • ☀️建议/推荐你
    • 📣关于我
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档