Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære String Pool, Metode Equals() | Streng
Java Grunnleggende

bookString Pool, Metode Equals()

equals()-metoden

Dette kapittelet gir en kort oversikt over equals()-metoden. Denne metoden brukes til å sammenligne objekter og benyttes ofte med String-objekter. La oss se på et eksempel der vi oppretter to identiske strengvariabler og sammenligner dem ved hjelp av ==:

Main.java

Main.java

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

I svaret får vi "false", men hvorfor? Verdiene til de to strengvariablene er de samme og lik "string". Dette skyldes at == sammenligner referansene til objektene i minnet, ikke de faktiske verdiene. Våre objekter befinner seg utenfor String pool.

String pool

Hva er String pool? Det er et område i heap-minnet som allokeres ved opprettelse av strengobjekter. Hvis vi oppretter et String-objekt med verdien "string" og deretter oppretter et nytt String-objekt med samme verdi, vil begge objektene referere til det samme objektet i minnet, som ligger i string pool.

Så hvorfor fikk vi "false" i vårt tilfelle? Det er fordi vi omgår string pool ved å opprette objekter med syntaksen String first = new String("string");. Når vi oppretter et String-objekt med en annen syntaks, for eksempel String first = "string";, vil det plasseres i string pool.

La oss se på et kodeeksempel:

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

La oss se på et diagram som forklarer hvordan dette fungerer og hvilke objekter som finnes i String Pool.

Hvordan sammenligner vi verdiene til strenger i String Pool og de utenfor? For dette formålet tilbyr Java metoden equals, som sammenligner verdiene til våre String-objekter i stedet for referansene deres. La oss se på et eksempel hvor vi sammenligner strenger ved å bruke equals-metoden i stedet for ==.

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Nå kan vi se at vi har den korrekte sammenligningen.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 7

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

Suggested prompts:

Can you explain more about the difference between == and equals() in Java?

Why does using new String() bypass the string pool?

Can you show an example where == returns true for strings?

bookString Pool, Metode Equals()

Sveip for å vise menyen

equals()-metoden

Dette kapittelet gir en kort oversikt over equals()-metoden. Denne metoden brukes til å sammenligne objekter og benyttes ofte med String-objekter. La oss se på et eksempel der vi oppretter to identiske strengvariabler og sammenligner dem ved hjelp av ==:

Main.java

Main.java

copy
123456789
package com.example; public class Main { public static void main(String[] args) { String first = new String("string"); String second = new String("string"); System.out.println(first == second); } }

I svaret får vi "false", men hvorfor? Verdiene til de to strengvariablene er de samme og lik "string". Dette skyldes at == sammenligner referansene til objektene i minnet, ikke de faktiske verdiene. Våre objekter befinner seg utenfor String pool.

String pool

Hva er String pool? Det er et område i heap-minnet som allokeres ved opprettelse av strengobjekter. Hvis vi oppretter et String-objekt med verdien "string" og deretter oppretter et nytt String-objekt med samme verdi, vil begge objektene referere til det samme objektet i minnet, som ligger i string pool.

Så hvorfor fikk vi "false" i vårt tilfelle? Det er fordi vi omgår string pool ved å opprette objekter med syntaksen String first = new String("string");. Når vi oppretter et String-objekt med en annen syntaks, for eksempel String first = "string";, vil det plasseres i string pool.

La oss se på et kodeeksempel:

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first == second)); System.out.println("Result of comparing first and third: " + (first == third)); } }

La oss se på et diagram som forklarer hvordan dette fungerer og hvilke objekter som finnes i String Pool.

Hvordan sammenligner vi verdiene til strenger i String Pool og de utenfor? For dette formålet tilbyr Java metoden equals, som sammenligner verdiene til våre String-objekter i stedet for referansene deres. La oss se på et eksempel hvor vi sammenligner strenger ved å bruke equals-metoden i stedet for ==.

Main.java

Main.java

copy
1234567891011
package com.example; public class Main { public static void main(String[] args) { String first = "string"; String second = "string"; String third = new String("string"); System.out.println("Result of comparing first and second: " + (first.equals(second))); System.out.println("Result of comparing first and third: " + (first.equals(third))); } }

Nå kan vi se at vi har den korrekte sammenligningen.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 7
some-alt