如下两个题目输出结果相同吗?各是什么:
1.
Object
o1
=
true
?
new
Integer(1) :
new
Double(2.0);
System.
out
.println(
o1
);
//
2.
Object
o2
;
if
(
true
)
o2
=
new
Integer(1);
else
o2
=
new
Double(2.0);
System.
out
.println(
o2
);
//
第一题:隐藏考察三目运算符的自动类型提升,在编译时,1自动提升为1.0;
根据syso的默认调用toString,我们知道最后答案为Integer类中的1.0
第二题:没有自动类型提升,直接输出toString的返回值1
另一题:说明输出结果
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;
Integer y = 128;
System.out.println(x == y);//false
这道题个人感觉考的比较偏,主要考了Integer中的缓存特性:
简单来说,
Interger的源代码中,为了将用户常用的数字范围的使用操作变得更快(缓存区更快),特意设置了-128到127的数字范围,若在这个范围之内,如m和n,它们就会共用同一处缓存,而非x和y的情况,它们所用的是不同的内存虚拟地址。