Hezkej pokus. Ale uvědomujete si, že si to každý nyní může prohlídnout a bude jim to jasné?
Mně to jasné je. Bavili jsme se o chování operátoru
==, takže jsem porovnal dva následující příklady (v historii diskuse to lze najít):
public class HelloWorld
{
public static void main(String[] args)
{
Integer a = 1024;
Integer b = 1024;
System.out.print(a == b); // false
}
}
class Integer:
def __init__(self, value):
self.value = value
a = Integer(1024)
b = Integer(1024)
print(a == b) #False
Vy jste si v Javě vyrobil vlastní typ
Cislo a vyšlo vám to (jaké překvapení) stejně. Pro Python jste tenhle příklad vůbec nenapsal.
Dále jsem psal, že v Pythonu můžete přetížit operátor
==, Java přetěžování operátorů záměrně nepodporuje, ale pro porovnání hodnot objektů používá metodu
equals(), kterou přetížit můžete. Psal jsem, že když to přetížení naimplementujete stejně v Pythonu i Javě, opět dostanete stejný výsledek. Kód pro Javu jsem tedy neuvedl, stačilo použít stávající implementaci v
java.lang.Integer.equals()…
Tuhle variantu už jste vy naimplementoval pro oba jazyky, a – světe div se – je to jak jsem psal, vychází to v obou jazycích stejně. Dovolte, abych z vašeho kódu ty dva řádky vypíchl:
System.out.println(a.equals(b)); // true
print (a == b) # True – používá se zde přetížený operátor ==
Předpokládám, že teď budou následovat vaše klasické nářky, že jsem sice psal operátor
==, ale určitě jsem tím myslel identitu…