System.out.println( Integer.valueOf(1).equals(Long.valueOf(1)) );   // false


上面的print语句显示false,分别使用IntegerLongvalueOf()方法时,原因很清楚两个对象(IntegerLong)具有不同的类型,因此它们不相等。

但是,如果将整数值1和长值1l传递给字符串类的valueOf()方法,我的print语句将输出true

System.out.println( String.valueOf(1).equals(String.valueOf(1l)) );  // true


我无法理解它们之间的确切区别是什么。
我需要对此进行解释。

最佳答案

答案是关于Integer#equals的实现:

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


您不必输入if语句,因为它们的类型不同。

在第二个版本中,您得到true,因为.. 1在字符串表示形式上是相同的。

关于java - String类和其他包装器类的valueOf()方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20309942/

10-11 00:52