Diskuze: Temná zákoutí Javy
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Je to zajímavé tím, že to není konzistentní. Buď by to mělo v obou případech vypisovat "true" (stejné hodnoty) nebo "false" (rozdílné objekty). Bral bych spíš to druhé a proto je mi divné, proč pro čísla do 127 je hodnota "true"
Jo to mi mohlo dojít
Blbě jsem si ten kód přečetl... A existuje nějaké racionální
vysvětlení?
Javu nedělám trochu googlování http://stackoverflow.com/…l-128-number každopádně je to hodně
zajímavý
Určite to má niečo spoločné s tými hodnotami.
Myslím, že keď tam dáš :
System.out.println(Integer.valueOf(127) == Integer.valueOf(127));
System.out.println(Integer.valueOf(126) == Integer.valueOf(126));
výsledky budú true.
(Nemám to vyskúšané)
Tak to je ještě hezčí příklad. Díky. Je na tom hezky vidět rozdíl mezi "int" a "Integer", tedy mezi primitivním a referenčním typem.
Na tom přeci není vůbec nic temného
Stačí se podívat do dokumentace metody Integer.valueOf, kde se jasně
píše, že hodnoty -128 to 127 se cachují.
V prvním případě je výsledek true, neboť se jedná o stejnou (cachovanou)
instanci třídy Integer.
V druhém případě je výsledek false, protože se jedná o dvě různé
instance.
Cache by se měla chovat vždy tak, aby byla transparentní. Tedy dávat stejná data, jako kdyby neexistovala.
Někdy jsem rád, že v Javě nemusím programovat
Díky, až zas v nějaké konverzaci hejtovat Javu, ukážu mu tohle
Myslím si, že podobná temná zákoutí se dají najít i v C#.
Mi stačilo, když jsem jednou procházel implementaci třídy Convert.
Metoda, která vrací jen true je super (měla dokonce i parametr)
Dají, ale pravděpodobně ne u něčeho tak jednoduchého jako je int.
Podívej se pořádně. Tohle se netýká int, ale Integer. To je rozdíl.
To máš pravdu, vykradnúť (čítaj = "inovovať" ) vymoženosti z ostatných jazykov
je less-error-prone.
Téma diskuze by se mělo jmenovat temná zákoutí ve znalostech Javy
Pokud potřebuješ porovnat hodnoty, použij metodu equals. Pokud potřebuješ porovnat reference, použij operátor ==.
Zobrazeno 18 zpráv z 18.