Zkuste před porovnáním zavolat na obou String objektech intern() a vyjde
druhý if jako true. Ale to jen abych vás navedl na vyjasnění si principu
fungování stringu v Javě. Správně by se mělo porovnávat přes equals - s tím
se nespalite.

H.
Dne 3.3.2011 17:34 "Tomas Pitner" <[email protected]> napsal(a):
> 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