4

为什么在将 Java 整数与 Jython 中具有相同值的 Python 之一进行比较时,我会遇到以下行为?

>>> from java.lang import Integer
>>> 10 == Integer(10)
False
>>> 10 <= Integer(10)
True
>>> 10 >= Integer(10)
True

好的,所以我觉得<=>=运算符都按预期进行评估很奇怪,但==没有......所以现在让我们检查 Java 和 Jython 类型之间的隐式转换:

>>> i = Integer(10)
>>> i == 10
False

我听到你说的其他 Java 类呢?我们试试看:

>>> from java.lang import Boolean
>>> Boolean(0) == False
False
>>> Boolean(0) == True
False
>>> Boolean(0)  # lets just check it is a Java false not a Python one
false

我是否遗漏了某些东西,或者它是否像__eq__Java 类的魔法(dunder)方法被破坏一样简单(我使用的是 Jython 2.7)?

编辑

感谢weston澄清在 java 中的10 == new Integer(10)评估为true,因此问题不是Java 中 == vs equals() 之间的区别是什么的重复?

4

1 回答 1

5

本质上是因为==比较盒装类型的引用,而不是实际值。

但是为了进一步混淆水域<=并且>=会自动拆箱任何盒装的操作数。

于 2017-02-02T13:21:44.250 回答