Integer(100)和Long(100)不相等,因为它们属于不同的包装类,一个是Integer,另一个是Long,它们的底层表示也不同。
Integer是用来表示32位有符号整数的包装类,而Long是用来表示64位有符号整数的包装类。在Java中,这两个包装类的实例是不可互相转换的,因为它们的底层数据类型不同。
如果要比较它们的值是否相等,可以使用equals方法,但是由于它们的类型不同,比较时需要小心。例如:
Integer integerNumber = 100;
Long longNumber = 100L;
boolean areEqual = integerNumber.equals(longNumber); // 这将返回false
在上面的示例中,integerNumber和longNumber的值都是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同理.