关于equal和==

xiaoxiao2021-02-28  225

最近面试的时候总是遇到这个问题的笔试,以前学的时候没有深究,现在是时候来总结一下了

1.基本类型和包装类

诸如

new Integer(32)==32 new Integer(32).equal(32) ...

此时==比较的就是具体的值,所以在此包装类和基本类型就没有区别,且各包装类和各基本类型可以互等,例:

new Integer(32) == 32f; new Float(32f) ==32d; new Double(32d) == 32; //例子只举了3个,其他的自己触类旁通 ...

再来看看equal,看了源码,发现包装类的equal都是先进行了 instanceof 判断,之后才是进行值的比较,例:

new Integer(32).equal(new Integer(32)); //instanceof通过,之后比值,为true new Integer(32).equal(new Float(32f)); //instanceof 不通过,为flase new Integer(32).equal(32f); //instanceof 不通过,为flase new Integer(32).equal(32); //instanceof 通过,比值,为true //至于其他的自己触类旁通,其他包装类不再举例

2.包装类和包装类

new Integer(32) .equals( new Integer(32)) //instanceof 通过,比值,为true new Integer(32) == new Integer(32); //这时候直接比较的就是类,类与类一般是不会==的, 为false new Integer(32) .equals( new Float(32f)) //instanceof 不通过,为false new Integer(32) == new Float(32f); //这就很明显为false了

3.基本类型和基本类型

这个就很明显了,基本都成立

32==32f; 32==32d; //其他不再举例 ...

总结:

在真实值相等的情况下(32与32.0,32f…),==在类与类直接比较时总为false,毕竟内存地址不同,在基本类型都为true,equal方法需先考虑是否通过 instanceof ,之后再进行比值。

转载请注明原文地址: https://www.6miu.com/read-18529.html

最新回复(0)