最近面试的时候总是遇到这个问题的笔试,以前学的时候没有深究,现在是时候来总结一下了
诸如
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 //至于其他的自己触类旁通,其他包装类不再举例这个就很明显了,基本都成立
32==32f; 32==32d; //其他不再举例 ...在真实值相等的情况下(32与32.0,32f…),==在类与类直接比较时总为false,毕竟内存地址不同,在基本类型都为true,equal方法需先考虑是否通过 instanceof ,之后再进行比值。