自动拆箱与装箱

自动拆箱与装箱

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记

进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。

自动拆箱与装箱是Java语言中一个重要的特性,它们在编程过程中起着至关重要的作用。本文将深入探讨自动拆箱与装箱的原理和相关细节。

概念

基本概念

装箱:把基本数据类型转换为对应的包装类类型

拆箱:把包装类类型转换为对应的基本数据类型

分析

在Java中,基本数据类型(如int、char、boolean等)是非对象的,而引用数据类型(如Integer、Character、Boolean等)是对象。拆箱是将包装类型对象转换为基本数据类型的过程,而装箱则是将基本数据类型转换为包装类型对象的过程。自动拆箱与装箱是指在需要的时候,Java编译器会自动地进行这些转换,使得我们在编程过程中更加方便地使用基本数据类型和引用数据类型。

原理

自动拆箱的原理

通过调用包装类型对象的xxxValue()方法将其转换为相应的基本数据类型。例如,当我们将一个Integer对象赋值给一个int类型的变量时,编译器会自动调用Integer对象的intValue()方法,将其转换为int类型。这样,我们就可以直接使用基本数据类型进行运算和比较,而无需手动进行类型转换。

自动装箱的原理

通过调用包装类型的valueOf()方法将基本数据类型转换为包装类型对象。例如,当我们将一个int类型的变量赋值给一个Integer对象时,编译器会自动调用Integer类的valueOf()方法,将int类型转换为Integer对象。这样,我们就可以将基本数据类型作为对象进行操作,享受到对象的各种方法和特性。

总结

自动装箱和拆箱的原理是由Java编译器在编译时进行处理的,编译器会根据上下文自动插入装箱和拆箱的代码,使得程序员可以直接使用基本类型和包装类型,而不需要手动进行类型转换。这种机制可以简化代码的编写,提高代码的可读性和可维护性。此外,自动拆箱与装箱还有助于避免一些常见的编程错误,如类型不匹配等。

注意事项

1、性能损耗:自动装箱和拆箱会引入额外的性能损耗,因为需要进行对象的创建和销毁。在性能敏感的场景下,尽量避免频繁的装箱和拆箱操作。

2、空指针异常:在拆箱操作时,如果装箱对象为null,则会抛出空指针异常。因此,在进行拆箱操作之前,需要先进行null的判断。

3、对象比较:自动装箱会导致对象的创建,因此在比较两个装箱类型的值时,应使用equals()方法进行比较,而不是使用 == 运算符。因为 == 运算符比较的是对象的引用,而不是对象的值。

4、缓存对象:在装箱操作时,Java对于某些范围内的整数和字符类型进行了缓存,可以直接使用缓存对象,而不需要创建新的对象。例如,对于整数类型,范围在-128到127之间的整数会被缓存,可以直接使用Integer.valueOf()方法获取缓存对象。

5、不可变性:包装类型是不可变的,即一旦创建,其值不能被修改。如果需要修改值,需要创建一个新的包装对象。

代码示例

java 复制代码
public class crj {
    public static void main(String[] args) {
        //装箱
//        Integer i=Integer.valueOf(100);
        //自动装箱
        Integer ii = 100;
        //自动拆箱
        ii+=200;  //ii==ii.intValue()+200
        System.out.println(ii);
    }
}
相关推荐
JH30736 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_7 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble8 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟8 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖8 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_12498707539 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_9 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.9 小时前
Day06——权限认证-项目集成
java
瑶山9 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy9 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法