3

爲什麼在將Java整數與Jython中相同的Python值進行比較時遇到以下行爲?比較Java和Jython類型時的奇怪行爲

>>> 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__(dunder)方法打破了Java類(我用Jython 2.7)?

編輯

感謝weston澄清,在Java中10 == new Integer(10)評估爲true,因此問題不是What is the difference between == vs equals() in Java?

+2

可能的重複[在Java中的== vs equals()有什麼區別?](http://stackoverflow.com/questions/7520432/what-is-the-difference-between-vs-equals-in -java) – Julien

+1

不是重複的,那個問題沒有解釋這是因爲在java中沒有看到這種行爲'10 == new Integer(10)'在java中是true。 – weston

回答

4

基本上是一個重複的,那是因爲==比較盒裝類型引用,不實際值。

但是要進一步渾濁水域<=>=會自動取消任何盒裝操作數。

+1

因此,只有一邊裝箱,jython'=='會將另一邊框起來,不像裝有盒裝邊的java。當然這會解釋行爲,但是你有參考嗎? – weston

+1

jython.org:[「這些操作符與Java的操作符沒有顯着區別。」](http://www.jython.org/jythonbook/en/1.0/OpsExpressPF.html#comparison-operators)似乎很奇怪,離開並不值得注意。 – weston