Integer和int的比较

Java_Coder 发布于 2014/07/22 14:44
阅读 302
收藏 0

Integer a = 1;

int h =1;

System.out.println(a == h); // true

打开class文件后:   System.out.println(a.intValue() == h);

在深入理解java虚拟机这本书里说:包装类的“==“运算在不遇到算术运算的情况下不会自动拆箱!!

矛盾啊。。


加载中
0
逝水fox
逝水fox

看操作数类型,引用和int是不可比的,当然会自动拆箱。

书上说的是应该是两个Integer == 的时候不会拆箱对比而是引用比较吧。

0
dreamers
dreamers

自动转换,即装拆箱规则(使用==时):


如果左右两边都是对象,则是以对象的形式来比较。
如果其中一个为基本类型,则对象会拆箱为基本类型来比较。
特别地,任何 包装类型的值为 NULL 的情况时,在拆箱时会抛出 NullPointerException

0
obaniu
obaniu
打开class文件后: System.out.println(a.intValue() == h);

Integer、Float、Long等一些原生类型的包装类和原生类型比较(int、float、long)不用拆箱,是因为编译器结合包装类特殊处理了。为什么会有这些包装类?因为像int、float、long这些基本数据类型在java中不是对象。也就是因为它们不是对象,所以如果你在使用泛型涉及int、float、long,就必须用包装类(比如List<Integer> list)。

C#就没有这么混淆的概念,因为它的所有类型都是对象包括int、long、float这些基本类型。

返回顶部
顶部