比较Java和Jython类型时的奇怪行为

时间:2017-02-02 13:19:00

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

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

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

好的,所以我发现<=>=运算符按预期进行评估很奇怪,但==却没有...所以现在让我们检查Java和&amp;之间的隐式转换。 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类(我使用的是Jython 2.7)的__eq__ magic(dunder)方法一样简单?

修改

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

1 个答案:

答案 0 :(得分:5)

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

但是进一步使<=>=水域变得混乱,将自动取消装箱任何装箱操作数。