【问题标题】:Odd behaviour when comparing Java and Jython types比较 Java 和 Jython 类型时的奇怪行为
【发布时间】:2017-06-19 14:05:56
【问题描述】:

为什么在 Jython 中将 Java 整数与具有相同值的 Python 进行比较时会出现以下行为?

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

好的,所以我觉得很奇怪 &lt;=&gt;= 运算符都按预期进行计算,但 == 没有...所以现在让我们检查 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

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

编辑

感谢weston 澄清在java 中10 == new Integer(10) 评估为true,因此问题不是What is the difference between == vs equals() in Java? 的重复项

【问题讨论】:

标签: java jython primitive-types comparison-operators jython-2.7


【解决方案1】:

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

但为了进一步混淆,&lt;=&gt;= 将自动取消装箱操作数。

【讨论】: