Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele String-Pooli, Equals()-Metodi | Merkkijono
Java Perusteet

bookString-Pooli, Equals()-Metodi

equals()-metodi

Tässä luvussa esitellään lyhyesti equals()-metodi. Tätä metodia käytetään olioiden vertailuun, ja sitä käytetään yleisesti String-olioiden kanssa. Tarkastellaan esimerkkiä, jossa luodaan kaksi identtistä merkkijonovariaabelia ja verrataan niitä käyttäen ==-operaattoria:

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); } }

Vastauksena saadaan "false", mutta miksi? Kahden merkkijonovariaabelin arvot ovat samat ja yhtä kuin "string". Tämä johtuu siitä, että == vertaa olioiden viitteitä muistissa, ei itse arvoja. Oliomme sijaitsevat String poolin ulkopuolella.

String pool

Mikä on String pool? Se on alue keon muistissa, joka varataan merkkijono-olioiden luomisen yhteydessä. Jos luomme String-olion arvolla "string" ja sitten toisen String-olion samalla arvolla, molemmat oliot viittaavat samaan olioon muistissa, joka sijaitsee string poolissa.

Miksi siis saimme "false" omassa tapauksessamme? Tämä johtuu siitä, että ohitimme string poolin luomalla oliot syntaksilla String first = new String("string");. Kun luomme String-olion eri syntaksilla, kuten String first = "string";, se sijoitetaan string pooliin.

Tarkastellaan esimerkkikoodia:

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)); } }

Tarkastellaan kaaviota, joka selittää, miten tämä toimii ja mitkä objektit sijaitsevat String Pool -alueella.

Miten vertaillaan merkkijonojen arvoja String Pool -alueella ja sen ulkopuolella? Tätä varten Java tarjoaa equals-metodin, joka vertaa String-olioiden arvoja viittausten sijaan. Tarkastellaan esimerkkikoodia, jossa vertaillaan merkkijonoja käyttämällä equals-metodia ==-operaattorin sijaan.

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))); } }

Nyt voimme nähdä, että vertailu on oikea.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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-Pooli, Equals()-Metodi

Pyyhkäise näyttääksesi valikon

equals()-metodi

Tässä luvussa esitellään lyhyesti equals()-metodi. Tätä metodia käytetään olioiden vertailuun, ja sitä käytetään yleisesti String-olioiden kanssa. Tarkastellaan esimerkkiä, jossa luodaan kaksi identtistä merkkijonovariaabelia ja verrataan niitä käyttäen ==-operaattoria:

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); } }

Vastauksena saadaan "false", mutta miksi? Kahden merkkijonovariaabelin arvot ovat samat ja yhtä kuin "string". Tämä johtuu siitä, että == vertaa olioiden viitteitä muistissa, ei itse arvoja. Oliomme sijaitsevat String poolin ulkopuolella.

String pool

Mikä on String pool? Se on alue keon muistissa, joka varataan merkkijono-olioiden luomisen yhteydessä. Jos luomme String-olion arvolla "string" ja sitten toisen String-olion samalla arvolla, molemmat oliot viittaavat samaan olioon muistissa, joka sijaitsee string poolissa.

Miksi siis saimme "false" omassa tapauksessamme? Tämä johtuu siitä, että ohitimme string poolin luomalla oliot syntaksilla String first = new String("string");. Kun luomme String-olion eri syntaksilla, kuten String first = "string";, se sijoitetaan string pooliin.

Tarkastellaan esimerkkikoodia:

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)); } }

Tarkastellaan kaaviota, joka selittää, miten tämä toimii ja mitkä objektit sijaitsevat String Pool -alueella.

Miten vertaillaan merkkijonojen arvoja String Pool -alueella ja sen ulkopuolella? Tätä varten Java tarjoaa equals-metodin, joka vertaa String-olioiden arvoja viittausten sijaan. Tarkastellaan esimerkkikoodia, jossa vertaillaan merkkijonoja käyttämällä equals-metodia ==-operaattorin sijaan.

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))); } }

Nyt voimme nähdä, että vertailu on oikea.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 7
some-alt