webForumDet fria alternativet

IF-satsen

5 svar · 518 visningar · startad av westman

westmanMedlem sedan aug. 2004249 inlägg
#1

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

Aleph_OneMedlem sedan juni 2003372 inlägg
#2

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.

westmanMedlem sedan aug. 2004249 inlägg
#3

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

LimeMedlem sedan sep. 2001961 inlägg
#4

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

Sam82Medlem sedan feb. 200512 inlägg
#5

du kan ju också köra med equals metoden
if(s1.equals(s2))
eller vice versa.

BromsMedlem sedan sep. 2002188 inlägg
#6

Metoden som Sam82 skrev är klart att föredra!

124 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)