Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Merkkijonojen Vertailu Javassa | Merkkijonot
Johdatus Javaan

Merkkijonojen Vertailu Javassa

Pyyhkäise näyttääksesi valikon

Vertailussa Java alkaa käyttäytyä hieman "alatasoisemmin" kuin voisi odottaa. Tuntuu itsestään selvältä, että merkkijonoja voisi verrata samalla tavalla kuin lukuja — käyttämällä ==. Loppujen lopuksi, jos kaksi merkkijonoa näyttävät täysin samoilta, miksi ne eivät olisi yhtä suuria?

Ongelma ==-operaattorissa

Jos käytät ==-operaattoria merkkijonolitteraaleille, se vaikuttaa aluksi toimivan oikein:

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

Molemmat muuttujat osoittavat samaan olioon Javan sisäisessä merkkijonopoolissa — kun sama literaali esiintyy uudelleen, Java käyttää olemassa olevaa. Siksi == palauttaa true.

Muutetaan nyt hieman tapaa, jolla merkkijonot luodaan:

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

Käyttämällä new String() Java luo joka kerta täysin erillisen olion — vaikka sisältö olisi identtinen. Koska == vertaa muistiosoitteita, ei tekstiä, se palauttaa false.

Tärkeä sääntö: == ei tarkista merkkijonon sisältöä — se tarkistaa, osoittavatko molemmat muuttujat täsmälleen samaan olioon muistissa.

equals() — Vertaa todellista sisältöä

Jos haluat verrata kahden merkkijonon todellista tekstiä, käytä .equals(). Se ohittaa muistin kokonaan ja keskittyy vain merkkeihin:

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

Vaikka order1 ja order2 ovat erillisiä olioita muistissa, .equals() vertaa niiden sisältöä ja palauttaa arvon true.

Kirjainkoon huomioiminen equals()-metodissa

Java on kirjainkokoriippuvainen, joten yksikin ero kirjainkoossa tekee merkkijonoista eriarvoiset:

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" ja "latte" käsitellään eri merkkijonoina, joten tulos on false.

equalsIgnoreCase() — Vertailu välittämättä kirjainkoosta

Kun haluat verrata merkkijonoja välittämättä isoista tai pienistä kirjaimista, käytä .equalsIgnoreCase()-metodia:

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() käsittelee "Latte" ja "LATTE" samoina ja palauttaa arvon true.

question mark

Mitä == vertaa, kun sitä käytetään merkkijonojen kanssa Javassa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 4. Luku 5
some-alt