Strings Vergelijken in Java
Veeg om het menu te tonen
Vergelijken is waar Java zich wat "lager bij de hardware" begint te gedragen dan je zou verwachten. Het lijkt logisch dat strings op dezelfde manier vergeleken kunnen worden als getallen — met ==. Als twee strings er immers identiek uitzien, waarom zouden ze dan niet gelijk zijn?
Het probleem met ==
Als je == gebruikt met string-literals, lijkt het in eerste instantie goed te werken:
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); } }
Beide variabelen verwijzen naar hetzelfde object in Java's interne string pool — wanneer hetzelfde letterlijke tekenreeks opnieuw verschijnt, hergebruikt Java de bestaande. Dus == geeft true terug.
Maar laten we nu iets veranderen aan hoe de strings worden aangemaakt:
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); } }
Met new String() instrueer je Java om elke keer een volledig apart object aan te maken — zelfs als de inhoud identiek is. Omdat == geheugenadressen vergelijkt en niet de tekst, geeft het false terug.
De belangrijkste regel: == kijkt niet naar de tekst binnen de string — het controleert of beide variabelen naar exact hetzelfde object in het geheugen verwijzen.
equals() — Vergelijking van de daadwerkelijke inhoud
Als je de daadwerkelijke tekst in twee strings wilt vergelijken, gebruik dan .equals(). Deze methode negeert het geheugen volledig en richt zich alleen op de tekens:
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)); } }
Hoewel order1 en order2 aparte objecten in het geheugen zijn, vergelijkt .equals() hun inhoud en geeft true terug.
Hoofdlettergevoeligheid met equals()
Java is hoofdlettergevoelig, dus zelfs één letter verschil in hoofdletters maakt strings ongelijk:
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" en "latte" worden als verschillende strings beschouwd, dus het resultaat is false.
equalsIgnoreCase() — Vergelijken zonder hoofdlettergevoeligheid
Voor het vergelijken van strings zonder rekening te houden met hoofdletters of kleine letters, gebruik .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() behandelt "Latte" en "LATTE" als identiek en geeft true terug.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Strings Vergelijken in Java
Vergelijken is waar Java zich wat "lager bij de hardware" begint te gedragen dan je zou verwachten. Het lijkt logisch dat strings op dezelfde manier vergeleken kunnen worden als getallen — met ==. Als twee strings er immers identiek uitzien, waarom zouden ze dan niet gelijk zijn?
Het probleem met ==
Als je == gebruikt met string-literals, lijkt het in eerste instantie goed te werken:
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); } }
Beide variabelen verwijzen naar hetzelfde object in Java's interne string pool — wanneer hetzelfde letterlijke tekenreeks opnieuw verschijnt, hergebruikt Java de bestaande. Dus == geeft true terug.
Maar laten we nu iets veranderen aan hoe de strings worden aangemaakt:
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); } }
Met new String() instrueer je Java om elke keer een volledig apart object aan te maken — zelfs als de inhoud identiek is. Omdat == geheugenadressen vergelijkt en niet de tekst, geeft het false terug.
De belangrijkste regel: == kijkt niet naar de tekst binnen de string — het controleert of beide variabelen naar exact hetzelfde object in het geheugen verwijzen.
equals() — Vergelijking van de daadwerkelijke inhoud
Als je de daadwerkelijke tekst in twee strings wilt vergelijken, gebruik dan .equals(). Deze methode negeert het geheugen volledig en richt zich alleen op de tekens:
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)); } }
Hoewel order1 en order2 aparte objecten in het geheugen zijn, vergelijkt .equals() hun inhoud en geeft true terug.
Hoofdlettergevoeligheid met equals()
Java is hoofdlettergevoelig, dus zelfs één letter verschil in hoofdletters maakt strings ongelijk:
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" en "latte" worden als verschillende strings beschouwd, dus het resultaat is false.
equalsIgnoreCase() — Vergelijken zonder hoofdlettergevoeligheid
Voor het vergelijken van strings zonder rekening te houden met hoofdletters of kleine letters, gebruik .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() behandelt "Latte" en "LATTE" als identiek en geeft true terug.
Bedankt voor je feedback!