1. Jämföra strängar
Det här är väl och bra. Men du kan se att strängarna s1
och s2
faktiskt är samma, vilket betyder att de innehåller samma text. När du jämför strängar, hur säger du åt programmet att inte titta på adresserna till String
objekt, utan på deras innehåll?
String
För att hjälpa oss med detta har Javas klass equals
metoden. Att kalla det ser ut så här:
string1.equals(string2)
Denna metod returnerar true
om strängarna är samma och false
om de inte är samma.
Exempel:
Koda | Notera |
---|---|
|
|
Fler exempel:
Koda | Förklaring |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Skift-okänslig strängjämförelse
I det sista exemplet såg du att jämförelsen ger . Faktum är att strängarna inte är lika. Men..."Hello".equals("HELLO")
false
Det är klart att strängarna inte är lika. Som sagt, deras innehåll har samma bokstäver och skiljer sig bara från fallet med bokstäverna. Finns det något sätt att jämföra dem och bortse från fallet med bokstäverna? Det vill säga, så det ger ?"Hello".equals("HELLO")
true
Och svaret på denna fråga är ja. I Java String
har typen en annan speciell metod: equalsIgnoreCase
. Att kalla det ser ut så här:
string1.equalsIgnoreCase(string2)
Namnet på metoden översätts ungefär som jämför men ignorera skiftläge . Bokstäverna i metodens namn inkluderar två vertikala linjer: den första är en gemen L
och den andra är en versal i
. Låt inte det förvirra dig.
Exempel:
Koda | Notera |
---|---|
|
|
3. Exempel på strängjämförelse
Låt oss bara ge ett enkelt exempel: anta att du behöver ange två rader från tangentbordet och avgöra om de är lika. Så här kommer koden att se ut:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. En intressant nyans av strängjämförelse
Det finns en viktig nyans som du måste vara medveten om.
Om Java-kompilatorn hittar flera identiska strängar i din kod (särskilt i din kod), kommer den bara att skapa ett enda objekt för dem för att spara minne.
String text = "This is a very important message";
String message = "This is a very important message";
Och här är vad minnet kommer att innehålla som ett resultat:

Och om du jämför text == message
här så får du true
. Så bli inte förvånad över det.
Om du av någon anledning verkligen behöver att referenserna är annorlunda, kan du skriva detta:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Eller det här:
String text = "This is a very important message";
String message = new String (text);
I båda dessa fall pekar variablerna text
och message
på olika objekt som innehåller samma text.
GO TO FULL VERSION