1. Sammenligning af strenge
Det her er godt og godt. Men du kan se, at strengene s1
og s2
faktisk er de samme, hvilket betyder, at de indeholder den samme tekst. Når du sammenligner strenge, hvordan fortæller du programmet om ikke at se på adresserne på String
objekter, men på deres indhold?
For at hjælpe os med dette har Javas String
klasse equals
metoden. At kalde det ser sådan ud:
string1.equals(string2)
Denne metode returnerer true
, hvis strengene er de samme, og false
hvis de ikke er ens.
Eksempel:
Kode | Bemærk |
---|---|
|
|
Flere eksempler:
Kode | Forklaring |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Størrelsessammenligning uden store og små bogstaver
I det sidste eksempel så du, at sammenligningen giver . Faktisk er strengene ikke ens. Men..."Hello".equals("HELLO")
false
Det er klart, at strengene ikke er ens. Når det er sagt, har deres indhold de samme bogstaver og adskiller sig kun efter tilfældet af bogstaverne. Er der nogen måde at sammenligne dem og se bort fra tilfældet med bogstaverne? Det vil sige, så det giver ?"Hello".equals("HELLO")
true
Og svaret på dette spørgsmål er ja. I Java String
har typen en anden speciel metode: equalsIgnoreCase
. At kalde det ser sådan ud:
string1.equalsIgnoreCase(string2)
Navnet på metoden oversættes groft som sammenlign, men ignorer store og små bogstaver . Bogstaverne i metodens navn omfatter to lodrette linjer: den første er et lille bogstav L
, og den anden er et stort bogstav i
. Lad det ikke forvirre dig.
Eksempel:
Kode | Bemærk |
---|---|
|
|
3. Eksempel på strengsammenligning
Lad os kun give et enkelt eksempel: Antag, at du skal indtaste to linjer fra tastaturet og afgøre, om de er ens. Sådan kommer koden til at se ud:
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 interessant nuance af streng sammenligning
Der er én vigtig nuance, som du skal være opmærksom på.
Hvis Java-kompileren finder flere identiske strenge i din kode (specifikt i din kode), vil den kun oprette et enkelt objekt til dem for at spare hukommelse.
String text = "This is a very important message";
String message = "This is a very important message";
Og her er hvad hukommelsen vil indeholde som et resultat:

Og hvis du sammenligner text == message
her, så får du true
. Så bliv ikke overrasket over det.
Hvis du af en eller anden grund virkelig har brug for, at referencerne er anderledes, så kan du skrive dette:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Eller dette:
String text = "This is a very important message";
String message = new String (text);
I begge disse tilfælde peger variablerne text
og message
på forskellige objekter, der indeholder den samme tekst.
GO TO FULL VERSION