这几天看到一个特别奇葩的面试题,大家分享一下!
public class Test03 { public static void main(String[] args) { Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2); System.out.println(f3 == f4); } } |
从代码本身上看是没有什么问题的,无疑两个输出均为true
int的包装类型可以自动转成int在以后的JDK版本中,
用过以前的版本的就应该知道如果包装类要转换成int类型
就要用一个方法叫valueOf,这个方法在eclipse点进去看它的构造就会得出:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
其中low的值为-128,high的值为127.
如果超过low小于high就比较值
不符合该条件就比较引用的地址
。
所以f1==f2应该为true
f3==f4为false
总结:所以有些东西并不是表面上的那么简单,这都要看平时累积的知识。