java 自动装箱 和 自动拆箱

本文介绍Java 5.0引入的自动装箱和拆箱特性,详细解析int和short在-128到127范围内共享对象的机制,并通过示例代码展示其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:
java 5.0 开始对基本数据类型提供了 自动装箱 (autoboxing) 和 自动拆箱 (autounboxing) 的功能,
使得基本数据类型与其对象之间的转换变得极其方便。

即便你不知道 什么是 自动装箱与拆箱,但相信你平常时候一直都在接触,只是在你还没有触及这样一个概念之前,一直没有发觉而已。
但是你需要知道在 java 中什么是自动装箱与拆箱,还需要知道 int 和 short 的装箱,因为这两个的装箱规则与 float 或 double 以及
其他的基本数据类型不完全一样。

自动装箱
1
2         /**
3         * 实际上,程序运行时,系统为我们执行了下面一条语句:
4         * Integer number = new Integer(290);
5         */

6         Integer number  =  290 ;
7         System.out.println(number);
8


自动拆箱

 1
 2         Integer number  =   290 ;
 3          //  Other code
 4       /**
 5         * 实际上,程序运行时,系统为我们执行了下面一条语句:
 6         * int number2 = number.intValue();
 7         */

 8          int  number2  =  number;
 9         System.out.println(number2);
10


就上面示例代码块而言,实际上自动装箱就是系统自动帮我们去 new 了 Integer 对象,大家都知道,每个对象都会有一个 hashCode() 方法,
这个方法是继承 Object 而来,Object 类是所有类的超类。当需要比较两个对象是否相等时,可以用 " == " 和 equals 来做比较。
于对象而言, " == " 比较的是哈希码的值,也就是比较 hashCode() 方法的返回值,这个值是唯一的,在底层它是用来确定对象在堆内存上的存储位置。
" == " 也可以用来做基本数据类型的比较。equals 方法大家都知道,它是用来比较两个对象的内容是否一样。
上面说到自动装箱其实就是系统自动帮我们去 new 了 Integer 对象,但是神奇的事情发生了:
当 int 的取值在  -128 ~ 127 之间的时候,这时候系统并不会每次都帮我们去 new 一个 Integer 对象,而是取值相同的对象只会被 new 一次,
取值相同的 Integer 对象系统不会再去 new 一次,而是共享了已有的这个 Integer 对象。
而当 int 的取值在  -128 ~ 127 之外的时候,这时候不管 Integer 对象的取值是否一样,系统都会去 new 一个。


示例代码:

 1
 2         //  -128~127 之内的数
 3         Integer number1  =   40 ;
 4         Integer number2  =   40 ;
 5         System.out.println( " number1 == number2 :  --->>  " + (number1  ==  number2));     //  output : true
 6         
 7          // -128~127 之外的数
 8         Integer number3  =   128 ;
 9         Integer number4  =   128 ;
10        System.out.println( " number3 == number4 :  --->>  " + (number3  ==  number4));     //  output : false
11        System.out.println( " number3 equals number4 :  --->>  " + (number3.equals(number4)));    // output : true
12


示例代码输出结果:

1
2 number1  ==  number2 :   --->>   true
3 number3  ==  number4 :   --->>   false
4 number3 equals number4 :   --->>   true
5


short 与 int 的装箱规则是一样,就不多说了,但不要认为所有的基本数据类型都有这样一个规则,比如 float 和 double 都没有这样的规则,
float 和 double 每次装箱的时候都是会包装成一个对象的。


  [ 随笔均原创,转载请注明出处:http://www.blogjava.net/fancydeepin ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值