比较 Java 和 Jython 类型时的奇怪行为
Odd behaviour when comparing Java and Jython types
为什么在 Jython 中将 Java 整数与 Python 整数进行比较时出现以下行为?
>>> from java.lang import Integer
>>> 10 == Integer(10)
False
>>> 10 <= Integer(10)
True
>>> 10 >= Integer(10)
True
好吧,我觉得奇怪的是 <=
和 >=
运算符的计算都符合预期,但 ==
却没有...所以现在让我们检查 [=] 之间的隐式转换35=] & 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__
魔法(dunder)方法被破坏了?
编辑
感谢 weston for clarifying that in java 10 == new Integer(10)
evaluates as true
and therefore the question is not a duplicate of What is the difference between == vs equals() in Java?
本质上是因为 ==
比较 references 用于盒装类型,而不是实际值。
但是为了进一步搅浑水 <=
和 >=
将 auto-unbox 任何盒装操作数。
为什么在 Jython 中将 Java 整数与 Python 整数进行比较时出现以下行为?
>>> from java.lang import Integer
>>> 10 == Integer(10)
False
>>> 10 <= Integer(10)
True
>>> 10 >= Integer(10)
True
好吧,我觉得奇怪的是 <=
和 >=
运算符的计算都符合预期,但 ==
却没有...所以现在让我们检查 [=] 之间的隐式转换35=] & 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__
魔法(dunder)方法被破坏了?
编辑
感谢 weston for clarifying that in java 10 == new Integer(10)
evaluates as true
and therefore the question is not a duplicate of What is the difference between == vs equals() in Java?
本质上是因为 ==
比较 references 用于盒装类型,而不是实际值。
但是为了进一步搅浑水 <=
和 >=
将 auto-unbox 任何盒装操作数。