1. Strings vergelijken
Dit is allemaal goed en wel. Maar je kunt zien dat de strings s1
en s2
eigenlijk hetzelfde zijn, wat betekent dat ze dezelfde tekst bevatten. Hoe vertel je het programma bij het vergelijken van strings om niet naar de adressen van String
objecten te kijken, maar naar hun inhoud?
Om ons hierbij te helpen, String
heeft de klasse van Java de equals
methode. Bellen ziet er zo uit:
string1.equals(string2)
Deze methode retourneert true
of de strings hetzelfde zijn, en false
als ze niet hetzelfde zijn.
Voorbeeld:
Code | Opmerking |
---|---|
|
|
Meer voorbeelden:
Code | Uitleg |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Vergelijking van tekenreeksen die niet hoofdlettergevoelig zijn
In het laatste voorbeeld zag je dat de vergelijking . De snaren zijn inderdaad niet gelijk. Maar..."Hello".equals("HELLO")
false
Het is duidelijk dat de snaren niet gelijk zijn. Dat gezegd hebbende, hun inhoud heeft dezelfde letters en verschilt alleen per letter. Is er een manier om ze te vergelijken en het geval van de letters buiten beschouwing te laten? Dat wil zeggen, dus dat levert ?"Hello".equals("HELLO")
true
En het antwoord op deze vraag is ja. In Java String
heeft het type nog een speciale methode: equalsIgnoreCase
. Bellen ziet er zo uit:
string1.equalsIgnoreCase(string2)
De naam van de methode vertaalt zich ruwweg als vergelijk maar negeer hoofdlettergebruik . De letters in de naam van de methode bevatten twee verticale lijnen: de eerste is een kleine letter L
en de tweede is een hoofdletter i
. Laat je daardoor niet verwarren.
Voorbeeld:
Code | Opmerking |
---|---|
|
|
3. Voorbeeld van stringvergelijking
Laten we een eenvoudig voorbeeld geven: stel dat u twee regels met het toetsenbord moet invoeren en moet bepalen of ze hetzelfde zijn. Dit is hoe de code eruit zal zien:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Een interessante nuance van snaarvergelijking
Er is één belangrijke nuance waarvan u op de hoogte moet zijn.
Als de Java-compiler meerdere identieke strings in uw code aantreft (met name in uw code), dan zal het slechts een enkel object voor hen maken om geheugen te besparen.
String text = "This is a very important message";
String message = "This is a very important message";
En dit is wat het geheugen als resultaat zal bevatten:

En als je text == message
hier vergelijkt, dan krijg je true
. Wees daar dus niet verbaasd over.
Als je om wat voor reden dan ook echt wilt dat de referenties anders zijn, dan kun je dit schrijven:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Of dit:
String text = "This is a very important message";
String message = new String (text);
In beide gevallen verwijzen de variabelen text
en message
naar verschillende objecten die dezelfde tekst bevatten.
GO TO FULL VERSION