Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Sammenligning af Strenge i Java | Strenge
Introduktion til Java

Sammenligning af Strenge i Java

Stryg for at vise menuen

Sammenligning er der, hvor Java begynder at opføre sig en smule mere "lav-niveau" end forventet. Det virker oplagt, at strenge kunne sammenlignes på samme måde som tal — ved at bruge ==. Når alt kommer til alt, hvis to strenge ser identiske ud, hvorfor skulle de så ikke være ens?

Problemet med ==

Hvis du bruger == med streng-litteraler, ser det ud til at fungere fint i starten:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Begge variabler peger på det samme objekt i Javas interne string pool — når den samme literal optræder igen, genbruger Java den eksisterende. Derfor returnerer == true.

Men lad os nu ændre lidt på, hvordan strengene oprettes:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Ved at bruge new String() instruerer man Java i at oprette et helt separat objekt hver gang — selvom indholdet er identisk. Da == sammenligner hukommelsesadresser og ikke tekst, returnerer det false.

Den vigtigste regel: == ser ikke på teksten inde i strengen — det kontrollerer, om begge variabler peger på præcis det samme objekt i hukommelsen.

equals() — Sammenligning af faktisk indhold

Hvis du skal sammenligne den faktiske tekst i to strenge, skal du bruge .equals(). Den ignorerer hukommelsen fuldstændigt og fokuserer kun på tegnene:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Selvom order1 og order2 er separate objekter i hukommelsen, sammenligner .equals() deres indhold og returnerer true.

Storefølsomhed med equals()

Java er storefølsomt, så selv én bogstavforskel i store og små bogstaver gør strengene forskellige:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" og "latte" behandles som forskellige strenge, så resultatet er false.

equalsIgnoreCase() — Sammenligning uden hensyn til store og små bogstaver

Hvis du skal sammenligne strenge, men vil ignorere forskelle mellem store og små bogstaver, skal du bruge .equalsIgnoreCase():

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() behandler "Latte" og "LATTE" som identiske og returnerer true.

question mark

Hvad sammenligner ==, når det bruges med Strings i Java?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 4. Kapitel 5
some-alt