Wie würde sich das Programm ändern, wenn die zweite Anweisung folgendermaßen geändert werden würde:

String str2 = "String Literal" ;    // kleiner Unterschied

Eine gute Antwort könnte sein:

Jetzt, da das zweite Literal nicht identisch mit dem ersten ist, werden zwei literale Stringobjekte erzeugt und die Variablen str1 und str2 verweisen auf verschiedene Objekte.

Zwei Strings, die == sind, sind immer equal()

Der == -Operator bestimmt, ob zwei Namen auf dasselbe Objekt verweisen. Es ist in der realen Welt (und in Programmen) üblich für ein Objekt mehrere Namen zu haben, zum Beispiel "Mark Twain" und "Samuel Clemens" sind zwei Namen für denselben Autor.

Betrachten Sie zwei Strings:

String strA = new String ("Der Gingham Hund");
String strB = strA;

Für Strings ist es immer wahr, dass wenn == wahr ergibt, dann wird es auch equals() sein.

Aber das ist nicht unbedingt wahr für andere Objekttypen. Zum Beispiel können Sie Ihre eigenen Objekte definieren und Ihr eigenes Verhalten für deren equals() Methode definieren.

FRAGE 22:

In dem folgenden Code, wird equal() wahr oder falsch anzeigen?

String lit1 = "String Literal" ;
String lit2 = "String Literal" ;

if ( lit1.equals( lit2 ) )
  System.out.println("WAHR");
else
  System.out.println("FALSCH");