Long a = 999999999L; Integer b = 999999999; System.out.println(a.longValue()==b); System.out.println(a==b.intValue()); System.out.println(a.longValue()==b.intValue());
预测一下输出结果:false、false、false? false、false、true?true、true、true?
我们都了解,两个对象用==比较时,比较的是在内存中的存放地址;
那么a.longValue();会返回一个基本数据类型 与Integer b比较,答案应该是false a==b.intValue()也一样
a.longValue()==b.intValue() 则是两个基本数据类型比较,结果是true
实际输出结果
true
true
true
莫非前两个也是基本数据类型的比较? 把断点打到
public long longValue() { return value; }
public int intValue() { return value; } 发现前两步,这两个方法都有调用,也就是说,==操作其中一个做拆箱操作时,另一个会自动进行拆箱,比较的还是两个基本数据类型。
具体为什么会自动拆箱,待续...