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
1234567891011package 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
1234567891011package 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
1234567891011package 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
1234567891011package 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
12345678910package 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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
1234567891011package 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
1234567891011package 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
1234567891011package 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
1234567891011package 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
12345678910package 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.
Takk for tilbakemeldingene dine!