Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Sammenligning av strenger i Java | Strenger
Introduksjon til Java

Sammenligning av strenger i Java

Sveip for å vise menyen

Sammenligning er et område hvor Java begynner å oppføre seg litt mer "lavnivå" enn forventet. Det virker opplagt at strenger kan sammenlignes på samme måte som tall — ved å bruke ==. Tross alt, hvis to strenger ser identiske ut, hvorfor skulle de ikke være like?

Problemet med ==

Hvis du bruker == med streng-litteraler, ser det ut til å 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 variablene peker til det samme objektet i Javas interne string pool — når den samme litteralen dukker opp igjen, gjenbruker Java den eksisterende. Derfor returnerer == verdien true.

Men la oss nå endre litt på hvordan strengene opprettes:

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 å bruke new String() ber du Java om å opprette et helt eget objekt hver gang — selv om innholdet er identisk. Siden == sammenligner minneadresser, ikke tekst, returnerer det false.

Hovedregelen: == ser ikke på teksten inni strengen — det sjekker om begge variablene peker til akkurat det samme objektet i minnet.

equals() — Sammenligne faktisk innhold

Hvis du trenger å sammenligne den faktiske teksten i to strenger, bruk .equals(). Den ignorerer minnet fullstendig 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)); } }

Selv om order1 og order2 er separate objekter i minnet, sammenligner .equals() innholdet deres og returnerer true.

Storefølsomhet med equals()

Java er store- og småbokstavfølsom, så selv én bokstavforskjell i store eller små bokstaver gjør at strenger ikke er like:

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 forskjellige strenger, så resultatet er false.

equalsIgnoreCase() — Sammenligning uten hensyn til store og små bokstaver

Hvis du trenger å sammenligne strenger uten å ta hensyn til forskjeller mellom store og små bokstaver, bruk .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

Hva sammenligner == når det brukes med strenger i Java?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Sammenligning av strenger i Java

Sammenligning er et område hvor Java begynner å oppføre seg litt mer "lavnivå" enn forventet. Det virker opplagt at strenger kan sammenlignes på samme måte som tall — ved å bruke ==. Tross alt, hvis to strenger ser identiske ut, hvorfor skulle de ikke være like?

Problemet med ==

Hvis du bruker == med streng-litteraler, ser det ut til å 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 variablene peker til det samme objektet i Javas interne string pool — når den samme litteralen dukker opp igjen, gjenbruker Java den eksisterende. Derfor returnerer == verdien true.

Men la oss nå endre litt på hvordan strengene opprettes:

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 å bruke new String() ber du Java om å opprette et helt eget objekt hver gang — selv om innholdet er identisk. Siden == sammenligner minneadresser, ikke tekst, returnerer det false.

Hovedregelen: == ser ikke på teksten inni strengen — det sjekker om begge variablene peker til akkurat det samme objektet i minnet.

equals() — Sammenligne faktisk innhold

Hvis du trenger å sammenligne den faktiske teksten i to strenger, bruk .equals(). Den ignorerer minnet fullstendig 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)); } }

Selv om order1 og order2 er separate objekter i minnet, sammenligner .equals() innholdet deres og returnerer true.

Storefølsomhet med equals()

Java er store- og småbokstavfølsom, så selv én bokstavforskjell i store eller små bokstaver gjør at strenger ikke er like:

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 forskjellige strenger, så resultatet er false.

equalsIgnoreCase() — Sammenligning uten hensyn til store og små bokstaver

Hvis du trenger å sammenligne strenger uten å ta hensyn til forskjeller mellom store og små bokstaver, bruk .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.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 5
some-alt