String-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
123456789package 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
1234567891011package 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
1234567891011package 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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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?
Mahtavaa!
Completion arvosana parantunut arvoon 2.7
String-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
123456789package 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
1234567891011package 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
1234567891011package 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.
Kiitos palautteestasi!