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

Lia*_*con 4 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
Run Code Online (Sandbox Code Playgroud)

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

>>> i = Integer(10)
>>> i == 10
False
Run Code Online (Sandbox Code Playgroud)

我听到你说的其他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
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

Bat*_*eba 5

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

但要进一步混淆水域<=>=自动拆箱任何盒装操作数.

  • 因此,只有一方被装箱,jython` ==`将装箱另一侧,不像java打开盒装侧.当然这可以解释这种行为,但你有参考吗? (2认同)
  • jython.org:["这些运算符与Java的运算符没有显着差异."](http://www.jython.org/jythonbook/en/1.0/OpsExpressPF.html#comparison-operators)似乎很奇怪,这个离开不值得注意. (2认同)