Rätt ny vad gäller JAVA.
Antag att s1 och s2 är två strängar (deklarerade som String s1, s2). Jag har hört att man då inte bör använda detta: if(s1 = = s2) för att ta reda på ifall de är lika. Varför inte? Det har fungerat bra för mig...
5 svar · 518 visningar · startad av westman
Rätt ny vad gäller JAVA.
Antag att s1 och s2 är två strängar (deklarerade som String s1, s2). Jag har hört att man då inte bör använda detta: if(s1 = = s2) för att ta reda på ifall de är lika. Varför inte? Det har fungerat bra för mig...
Prova dom här raderna så ser du att det inte fungerar
String s = "foo";
String t = "f";
t += "oo";
System.out.println("s value: " + s);
System.out.println("t value: " + t);
System.out.println(s == t);
Använder du == så testas bara om det är samma objekt, inte värde.
Tänk mer objektorienterat och se String mer som ett objekt som vilket som helst egentligen där man kan använda equals metoden för att jämföra om 2 objekt har samma värde.
På något sätt så kuggade det inte riktigt i knoppen på mig, men nu när du säger det så låter det ju så självklart...
Faktum är att om man gör som Aleph_One skriver så blir s==t falskt men om man istället gör:
String s = "foo";
String t = "foo";
System.out.println(s == t);
så blir det sant.
Orsaken är att kompilatorn gör om och optimerar så att det egentligen står:
String s, t = "foo";
System.out.println(s == t);
dock bör strängar alltid kontrolleras med String.equals(Object o).
Endast atomära värden (int, boolean, char o.s.v.) får jämföras med ==.
du kan ju också köra med equals metoden
if(s1.equals(s2))
eller vice versa.
Metoden som Sam82 skrev är klart att föredra!