Ano, odpovedel jste si spravne.

-- Tomas Pitner



2011/3/3 Libor Jelinek <[email protected]>:
> Dobrý den!
> Dneska jsem se zarazil nad jedním problém ke kterému neumím nalést
> vysvětlení. Proto bych se chtěl tímto zeptat zkušenějších. Mám tento
> program:
>
> public class SchedulerLauncher {
>   public static void main(String[] args) {
>        if (args[0].equals("-h")) {   // a) vyhodnoceno na true
>        //if (args[0] == "-h") {      // b) vyhodnoceno na false-proč?
>            System.out.println("...sem prijde napoveda...");
>        }
>    }
> }
>
> Ten spustím jako $ java SchedulerLauncher -h. Čekal bych, že obě podmínky a)
> i b) jsou rovnocené, ale jen ta a) s využitím String.equals() je se
> vyhodnotí jako pravda. Proč ne ta druhá?
>
> Tuším, že to bude jistě něco s "ukazateli" (promiňte mi ten výraz, vím v
> Javě nejsou). args[0] je vlastně reference na objekt String v paměti. A "-h"
> čili new String("-h") je též reference, ale na jiný objekt, byť textový
> obsah je stejný. Operátor == porovnává adresy (referrence), nikoli
> vlastnosti objektu.
>
> Vysvětluji si to správně? Díky.
> Libor
>

Odpovedet emailem