类型,但是为了能够将这些基本数据类型当成对象操作, 为每一个基本数据类型都引
入了对应的包装类型(&), 的包装类就是 2 ,从 3 开始引
入了自动装箱4拆箱机制,使得二者可以相互转换。
为每个原始类型提供了包装类型:
原始类型#,,,,, ,!,
包装类型:,0,,5,2 ,/ ,*,6
$
%
3
7
1
8
9
class:; -<
=
====publicstaticvoid"(5 >? <
========2 'new2 ($)
========2 '$)=================44将 $ 自动装箱成 2 类型
========int'$)
========5"('')====44两个引用没有引用同一对象
========5"('')====44 自动拆箱成 类型再和 比较
====@
@
最近还遇到一个面试题,也是和自动装箱和拆箱有点关系的,代码如下所示:
$
%
3
7
1
8
publicclass-9$<
=
====publicstaticvoid"(5 >? <
========2 '99'99$'39%'39)
=
========5"('')
========5"($''%)
====@
@
如果不明就里很容易认为两个输出要么都是 要么都是 。首先需要注意的是
、、$、% 四个变量都是 2 对象引用,所以下面的''运算比较的不是值而是
引用。装箱的本质是什么呢?当我们给一个 2 对象赋一个 值的时候,会调用
2 类的静态方法 A,如果看看 A 的源代码就知道发生了什么。
$
%
3
publicstatic2 A(int<
====if(B'2 0&CCD'2 0
========return2 0>+(2 0&?)
====returnnew2 ()
@
2 0 是 2 的内部类,其代码如下所示:
1 之间,那么不会 & 新的 2 对象,而是直接引用常量池中的 2 对象,所以
上面的面试题中 '' 的结果是 ,而 $''% 的结果是 。
3
评论0
最新资源