3

Почему возникает следующее поведение при сравнении целого числа Java с Python с одним и тем же значением в Jython?Нечетное поведение при сравнении типов 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)?

EDIT

Благодаря weston для уточнения, что в Java 10 == new Integer(10) вычисляется как true и поэтому вопрос не является дубликат What is the difference between == vs equals() in Java?

+2

Возможный дубликат [В чем разница между == vs equals() в Java?] (Http://stackoverflow.com/questions/7520432/what-is-the-difference-between-vs-equals-in -java) – Julien

+1

Не дубликат, этот вопрос не объясняет это, потому что это поведение не видно в java '10 == new Integer (10)' истинно в java. – weston

ответ

4

По существу это потому, что == сравнивает референции для штучных типов, а не фактические значения.

Но для более грязных вод <= и >= будет автоматически распаковываться любые в штучной упаковке операнды.

+1

Итак, когда только одна сторона помещена в коробку, jython '==' будет бокнуть другую сторону, в отличие от java, которая освобождает бокс-боковую сторону. Конечно, это объясняет поведение, но есть ли у вас ссылка? – weston

+1

jython.org: ["эти операторы не имеют существенного отличия от Java."] (Http://www.jython.org/jythonbook/en/1.0/OpsExpressPF.html#comparison-operators) Кажется странным, что это выезд не примечателен. – weston

Смежные вопросы