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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 【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电子书籍、简历模板等海量资料。


目录
相关文章
|
4月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
40 3
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
57 1
Spring 框架:Java 开发者的春天
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
2月前
|
缓存 前端开发 JavaScript
9大高性能优化经验总结,Java高级岗必备技能,强烈建议收藏
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文介绍了9种性能优化方法,涵盖代码优化、数据库优化、连接池调优、架构层面优化、分布式缓存、异步化、Web前端优化、服务化、硬件升级、搜索引擎和产品逻辑优化。欢迎留言交流。
|
2月前
|
存储 算法 Java
Java的Set集合以其严格的“不重复性”著称,使开发者既好奇又困惑
Java的Set集合以其严格的“不重复性”著称,使开发者既好奇又困惑。本文将探讨Set为何如此“挑剔”。Set接口不包含重复元素,适用于需要唯一性约束的场景。其内部通过哈希表或红黑树等数据结构和哈希算法、equals()方法来确保元素的唯一性。示例代码展示了Set如何自动过滤重复元素,体现了其高效性和便利性。
37 2
|
1月前
|
存储 Java
在Java编程的世界里,标识符命名是一项基础且至关重要的技能
在Java编程的世界里,标识符命名是一项基础且至关重要的技能
13 0
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
4月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
37 7
|
4月前
|
Java 开发者 UED
“Java开发者必看:异步编程实战解析,掌握这些技巧,让你的代码跑得更快!
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点。异步编程作为提高应用响应速度和吞吐量的技术,在Java中广泛采用。本文详细介绍了Java异步编程的概念与优势,并通过实战示例展示了如何利用Future、Callable及CompletableFuture在实际项目中实施异步编程,帮助开发者更好地理解和应用这一技术。
52 2