---
title: 'Vergleichen von StringBuilder-Exemplaren und String mit StringBuilder'
url: 'https://tutego.de/blog/javainsel/2018/09/stringbuilder-equals-string-comparable-stringbuffer'
markdown: 'https://tutego.de/blog/javainsel/2018/09/stringbuilder-equals-string-comparable-stringbuffer.md'
date: '2018-09-11'
description: 'Zum Vergleichen von Strings bietet sich die bekannte equals(…)-Methode an. Diese ist aber bei StringBuilder nicht wie erwartet implementiert. Dazu gesellen sich andere Methoden, die zum Beispiel unabhängig von der Groß-/Kleinschreibung vergleichen. equals(…) bei der String-Klasse Die Klasse String …'
taxonomy:
  category:
    - Insel
    - 'Java 11'
---

# Vergleichen von StringBuilder-Exemplaren und String mit StringBuilder

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Vergleichen von StringBuilder-Exemplaren und String mit StringBuilder

11.09.2018 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Zum Vergleichen von Strings bietet sich die bekannte `equals(…)`-Methode an. Diese ist aber bei `StringBuilder` nicht wie erwartet implementiert. Dazu gesellen sich andere Methoden, die zum Beispiel unabhängig von der Groß-/Kleinschreibung vergleichen.

#### `equals(…)` bei der `String`-Klasse

Die Klasse `String` implementiert die `equals(Object)`-Methode, sodass ein `String` mit einem anderen `String` verglichen werden kann. Allerdings vergleich `equals(Object)` von `String` nur String/String-Paare. Die Methode beginnt erst dann den Vergleich, wenn das Argument auch vom Typ `String` ist. Das bedeutet, dass der Compiler alle Übergaben auch vom Typ `StringBuilder` bei `equals(Object)` zulässt, doch zur Laufzeit ist das Ergebnis immer `false`, da eben ein `StringBuilder` nicht vom Typ `String` ist. Ob die Zeichenfolgen dabei gleich sind, spielt keine Rolle.

#### `contentEquals(…)` beim `String`

Eine allgemeine Methode zum Vergleichen eines Strings mit entweder einem anderen `String` oder mit `StringBuilder` ist `contentEquals(CharSequence)`. Die Methode liefert die Rückgabe `true`, wenn der `String` und die CharSequence (`String`, `StringBuilder` und `StringBuffer` sind Klassen vom Typ CharSequence) den gleichen Zeicheninhalt haben. Die interne Länge des Puffers spielt keine Rolle. Ist das Argument `null`, wird eine `NullPointerException` ausgelöst.

Beispiel: Vergleiche einen `String` mit einem `StringBuilder`:

```java
String s = "Elektrisch-Zahnbürster";
StringBuilder sb = new StringBuilder( "Elektrisch-Zahnbürster" );
System.out.println( s.equals(sb) ); // false
System.out.println( s.equals(sb.toString()) ); // true
System.out.println( s.contentEquals(sb) ); // true
```

#### Kein eigenes `equals(…)` bei `StringBuilder`

Wollen wir zwei `StringBuilder`-Objekte miteinander vergleichen, so geht das *nicht* mit der `equals(…)`-Methode. Es gibt zwar die übliche von `Object` geerbte Methode, doch das heißt, nur Objektreferenzen werden verglichen. Anders gesagt: `StringBuilder` überschreibt die `equals(…)`-Methode nicht. Wenn also zwei verschiedene `StringBuilder`-Objekte mit gleichem Inhalt mit `equals(…)` verglichen werden, kommt trotzdem immer `false` heraus.

Beispiel: Um den inhaltlichen Vergleich von zwei `StringBuilder`-Objekten zu realisieren, können wir sie erst mit `toString()` in Strings umwandeln und dann mit `String`-Methoden vergleichen:

```java
StringBuilder sb1 = new StringBuilder( "The Ocean Cleanup" );

StringBuilder sb2 = new StringBuilder( "The Ocean Cleanup" );

System.out.println( sb1.equals( sb2 ) ); // false
System.out.println( sb1.toString().equals( sb2.toString() ) ); // true
System.out.println( sb1.toString().contentEquals( sb2 ) ); // true
```

#### `StringBuilder` ist `Comparable`

Seit Java 11 bietet `StringBuilder` eine Methode int `compareTo`​(`StringBuilder` another) sodass lexikografische Vergleiche möglich sind. (`StringBuilder` implementiert die Schnittstelle `Comparable`<`StringBuilder`>.) Somit realisieren `String` und `StringBuilder` beide eine Ordnung, siehe „Lexikografische Vergleiche mit Größer-kleiner-Relation“.

Eine Begleiterscheinung ist die Tatsache, dass bei gleichen Zeichenfolgen die Rückgabe von `compareTo(…)` gleich 0 ist. Das ist deutlich besser als erst den `StringBuilder` in einen `String` zu konvertieren.

Beispiel:

```java
StringBuilder sb1 = new StringBuilder( "The Ocean Cleanup" );

StringBuilder sb2 = new StringBuilder( "The Ocean Cleanup" );

System.out.println( sb1.compareTo( sb2 ) == 0 ); // true
```

Kategorien: [Insel](https://tutego.de/blog/javainsel/category/insel/), [Java 11](https://tutego.de/blog/javainsel/category/java-11/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Mit ByteArrayOutputStream in ein Byte-Feld schreiben](https://tutego.de/blog/javainsel/2018/09/bytearrayoutputstream-writebytes.md)
- Next: [Statische compare(…)-Methode in CharSequence](https://tutego.de/blog/javainsel/2018/09/statische-compare-methode-in-charsequence.md)
