1. Sammenligning af strenge

Det her er godt og godt. Men du kan se, at strengene s1og s2faktisk 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å Stringobjekter, men på deres indhold?

For at hjælpe os med dette har Javas Stringklasse equalsmetoden. At kalde det ser sådan ud:

string1.equals(string2)
Sammenligning af to strenge

Denne metode returnerer true, hvis strengene er de samme, og falsehvis de ikke er ens.

Eksempel:

Kode Bemærk
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

Flere eksempler:

Kode Forklaring
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
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 Stringhar 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
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


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:

streng sammenligning

Og hvis du sammenligner text == messageher, 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 textog messagepå forskellige objekter, der indeholder den samme tekst.