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 >>
