【960、包装类的底层, Integer(100)和Long(100)相等吗?】

83 阅读1分钟

Integer(100)Long(100)不相等,因为它们属于不同的包装类,一个是Integer,另一个是Long,它们的底层表示也不同。

Integer是用来表示32位有符号整数的包装类,而Long是用来表示64位有符号整数的包装类。在Java中,这两个包装类的实例是不可互相转换的,因为它们的底层数据类型不同。

如果要比较它们的值是否相等,可以使用equals方法,但是由于它们的类型不同,比较时需要小心。例如:

Integer integerNumber = 100;
Long longNumber = 100L;

boolean areEqual = integerNumber.equals(longNumber); // 这将返回false

在上面的示例中,integerNumberlongNumber的值都是100,但它们的类型不同,因此equals方法将返回false。如果只想比较它们的值而不考虑类型,可以使用自动拆箱来将它们转换为原始数据类型,然后进行比较,如下所示:

boolean areEqual = integerNumber.intValue() == longNumber.intValue(); // 这将返回true,因为它们的值相等

这样可以将它们的值转换为原始数据类型,然后进行比较,而不考虑它们的包装类类型。

Integer 类equals 方法源码:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

可看出是先判断是否为Integer实例,是就拆箱比较,否直接返回false。Long同理.