Java自动装箱和拆箱

简介: Java自动装箱和拆箱

1 自动装箱

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

Integer i = 100;//自动装箱
//相当于编译器自动为您作以下的语法编译:
Integer i = Integer.valueOf(100);//调用的是valueOf(100),而不是new Integer(100)

2 自动拆箱

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

Integer i = 100;
int j = i;//自动拆箱
//相当于编译器自动为您作以下的语法编译:
int j = i.intValue();

所以自动装箱与拆箱的功能是所谓的“编译器蜜糖(Compiler Sugar)”,虽然使用这个功能很方便,但在程序运行阶段您得了解Java的语义

3 包装类空指针异常问题

public class Test1 {
    public static void main(String[] args) {
        Integer i = null;
        int j = i;
    }
}

 执行结果如图所示:

示例的运行结果之所以会出现空指针异常,是因为示例中的代码相当于:

public class Test1 {
    public static void main(String[] args) {
        //示例的代码在编译时期是合法的,但是在运行时期会有错误,因为其相当于:
        Integer i = null; 
        int j = i.intValue();         
    }
}

 null表示i没有指向任何对象的实体,但作为对象名称是合法的(不管这个对象名称存是否指向了某个对象的实体)。由于实际上i并没有指向任何对象的实体,所以也就不可能操作intValue()方法,这样上面的写法在运行时就会出现NullPointerException错误。


4 自动装箱与拆箱

public class Test2 {
    /**
     * 测试自动装箱和拆箱 结论:虽然很方便,但是如果不熟悉特殊情况,可能会出错!
     */
    public static void main(String[] args) {
        Integer b = 23; // 自动装箱
        int a = new Integer(20); //自动拆箱
        // 下面的问题我们需要注意:
        Integer c = null;
        int d = c; // 此处其实就是:c.intValue(),因此抛空指针异常。
    }
}


目录
相关文章
|
2月前
|
Java 编译器
Java中的自动装箱和拆箱
Java中的自动装箱和拆箱
|
8月前
|
Java 编译器 程序员
Java动拆装箱
Java动拆装箱
62 0
|
2月前
|
Java
【Java】一个关于装箱的某里面试题
【Java】一个关于装箱的某里面试题
8 1
|
3月前
|
Java 编译器 测试技术
滚雪球学Java(07):自动装箱、自动拆箱,Java开发者必备技能
【2月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
74 5
|
10月前
|
Java 编译器
java基础 --- 装箱和拆箱
java基础 --- 装箱和拆箱
47 0
|
5月前
|
存储 缓存 Java
Java基本数据类型、包装类及拆装箱详解
Java的基本数据类型和对应的包装类是Java语言中处理数据的两个关键概念。基本数据类型提供了简单而高效的方式来存储数据,而包装类使得基本数据类型具有对象的特性。本文将深入探讨基本数据类型与包装类的应用场景及详细描述,并对自动拆箱和装箱的源码实现进行分析。
91 1
Java基本数据类型、包装类及拆装箱详解
|
7月前
|
存储 Java 编译器
Java包装类与自动拆箱装箱
Java包装类与自动拆箱装箱
|
8月前
|
缓存 Java 编译器
Java引用类型的自动装箱与缓存池
Java引用类型的自动装箱与缓存池
42 0
|
10月前
|
Java 编译器 测试技术
【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱、自动拆箱
【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱、自动拆箱
|
IDE Java 编译器
Java中自动装箱和拆箱
装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。 这里的`primitive type`就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。 通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6个类派生于公共的超类Number)。