webForumDet fria alternativet

IF-satsen

Java

5 svar · 520 visningar · startad av westman

Medlem sedan aug. 2004249 inlägg
Frågan#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...

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

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

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

Medlem sedan feb. 200512 inlägg
#5

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

Medlem sedan sep. 2002188 inlägg
#6

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

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)