1. Sammenligning av strenger

Dette er vel og bra. Men du kan se at strengene s1og s2faktisk er de samme, noe som betyr at de inneholder samme tekst. Når du sammenligner strenger, hvordan forteller du programmet om ikke å se på adressene til Stringobjekter, men på innholdet deres?

For å hjelpe oss med dette har Javas Stringklasse equalsmetoden. Å kalle det ser slik ut:

string1.equals(string2)
Sammenligning av to strenger

Denne metoden returnerer truehvis strengene er like, og falsehvis de ikke er like.

Eksempel:

Kode Merk
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. Snøresammenligning uten store og små bokstaver

I det siste eksemplet så du at sammenligningen gir . Strengene er faktisk ikke like. Men..."Hello".equals("HELLO")false

Det er klart at strengene ikke er like. Når det er sagt, har innholdet de samme bokstavene og skiller seg bare fra tilfellet til bokstavene. Er det noen måte å sammenligne dem og se bort fra tilfellet med bokstavene? Det vil si, så det gir ?"Hello".equals("HELLO")true

Og svaret på dette spørsmålet er ja. I Java Stringhar typen en annen spesiell metode: equalsIgnoreCase. Å kalle det ser slik ut:

string1.equalsIgnoreCase(string2)

Navnet på metoden oversettes omtrent som sammenlign, men ignorer store og små bokstaver . Bokstavene i metodens navn inkluderer to vertikale linjer: den første er en liten bokstav L, og den andre er en stor bokstav i. Ikke la det forvirre deg.

Eksempel:

Kode Merk
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

La oss gi et enkelt eksempel: anta at du må skrive inn to linjer fra tastaturet og finne ut om de er like. Slik vil koden 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 interessant nyanse av strengsammenligning

Det er én viktig nyanse du må være klar over.

Hvis Java-kompilatoren finner flere identiske strenger i koden din (spesielt i koden din), vil den bare lage et enkelt objekt for dem for å spare minne.

String text = "This is a very important message";
String message = "This is a very important message";

Og her er hva minnet vil inneholde som et resultat:

streng sammenligning

Og hvis du sammenligner text == messageher, så får du true. Så ikke bli overrasket over det.

Hvis du av en eller annen grunn virkelig trenger at referansene skal være annerledes, 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 tilfellene peker variablene textog messagetil forskjellige objekter som inneholder samme tekst.