我是靠谱客的博主 繁荣抽屉,最近开发中收集的这篇文章主要介绍Java基本类型的装箱与拆箱Java基本类型的装箱与拆箱,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java基本类型的装箱与拆箱

今天,我抽空做了一道选择题,是关于这方面,结果一不小心就错了。。。
题目是这样的:

在jdk1.5的环境下,有如下4条语句:

Integer i01 = 59;
int i02 = 59;
Integer i03 =Integer.valueOf(59);
Integer i04 = new Integer(59)

以下输出结果为false的是:

A. System.out.println(i01== i02);
B. System.out.println(i01== i03);
C. System.out.println(i03== i04);
D. System.out.println(i02== i04);

首先,这道题的答案是C。

A选项,虽然i01是int的打包器类型,i02是普通的int类型,但是当二者进行比较时,i01会自动拆箱,也就是i01会把里面的数值(59)拿出来进行比较,因此当然是true。

B选项,我们看到,i03是通过valueOf方法返回得到的,那么valueOf是怎么运作的呢,看一下这个方法的源码。

public static Integer valueOf(int i) {
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i);
}

这段代码简单来说,就是如果传入的int在IntegerCache.low(默认值是-128)与IntegerCache.high(默认值是127)之间,那就尝试看看前面缓存中有没有打包过相同的值,如果有就直接返回,否则就使用new创建新的Integer实例。对于i03来说,因为之前缓存中没有59,因此会返回新的Integer实例。会自动装箱,也就是还会调用valueOf方法,这时因为之前缓存区中存在59,所以会返回与i01相同的引用,因此是true。

C选项,我觉得主要通过分析B选项,这个选项很容易看出来是false了,因为i04就是直接通过new生成的,因此指向i04堆空间的引用和指向i03堆空间的一定不一样。

D选项,因为i02是基本数据类型,即使i04是打包器类型,但在这两者之间比较的时候,打包器类型会自动拆箱(把里面的数值(59)拿出来),因此是true。

最后

以上就是繁荣抽屉为你收集整理的Java基本类型的装箱与拆箱Java基本类型的装箱与拆箱的全部内容,希望文章能够帮你解决Java基本类型的装箱与拆箱Java基本类型的装箱与拆箱所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部