自动拆箱与装箱

简介: 自动拆箱与装箱

先进行专栏介绍

本专栏是自己学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、不可变性:包装类型是不可变的,即一旦创建,其值不能被修改。如果需要修改值,需要创建一个新的包装对象。


代码示例

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);
    }
}


相关文章
|
4月前
|
存储 安全 Java
day7:基本类型转换、包装类、自动装箱、自动拆箱
【7月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
38 3
|
缓存 Java
包装类(装箱&拆箱&数据类型转换)
​ 在Java5 中添加了两个新特性,那就是自动装箱和拆箱,因为基本类型的广泛使用,但是Java 又是面向对象的语言,所以提供了包装类型的支持。
50 0
|
Java API
Java开发——18.常用类(包装类,拆箱和装箱;BigInteger+BigDecimal)
Java中只有两种数据类型:基本数据类型和引用数据类型。
Java开发——18.常用类(包装类,拆箱和装箱;BigInteger+BigDecimal)
|
缓存 Java 编译器
包装类的自动装箱拆箱,==运算符及equals方法
包装类的自动装箱拆箱,==运算符及equals方法详解
152 0
包装类的自动装箱拆箱,==运算符及equals方法
|
Dubbo Java 编译器
自动装箱、拆箱了解多少?
Java 为我们提供了 8 种基本数据类型,为什么还需要提供各自的包装类型呢?您可能会觉得这个问题问的很奇怪,但是我觉得还是值的思考的。
|
编译器
减少装箱与拆箱
减少装箱与拆箱
139 0
|
存储 安全 Java
老生常谈--什么是装箱什么是拆箱
老生常谈--什么是装箱什么是拆箱
300 0
C#装箱和拆箱
C#装箱和拆箱 疑问   都知道C#有装箱和拆箱的操作,听闻也都是讲int类型转换成object类型就是装箱,将object类型再转回int类型就是拆箱。      描述的通俗点:   装箱 将值类型转换成引用类型,   拆箱 将引用类型转换成值类型。
4786 0