Praefix 1 stimmt ueberein. Praefix 2 stimmt nicht ueberein. Praefix 3 stimmt nicht ueberein. Praefix 4 stimmt ueberein.
Hier ist wie das letzte if des Programms funktioniert:
String burns = "My love is like a red, red rose.";
. . . . . .
if ( burns.startsWith( " My love".trim() ) )
System.out.println( "Praefix 4 stimmt ueberein." ); <-- wird ausgeführt
else
System.out.println( "Praefix 4 stimmt nicht ueberein." );
Der String " My love" beginnt mit zwei Leerzeichen,
also stimmt er nicht mit dem Beginn des Strings, der durch burns referenziert wird, überein.
Aber es wird seine trim() Methode aufgerufen,
die einen neuen String ohne führende Leerzeichen erzeugt:
if ( burns.startsWith( " My love".trim() ) )
-----+---- -----+-----
| |
| |
| +------- 1. Ein temporäres Stringobjekt
| wird erzeugt.
| Dieses temporäre Objekt
| enthält " My love"
|
| 2. Die trim() Methode des
| temporären Objekts wird aufgerufen.
|
| 3. Die trim() Methode gibt
| eine Referenz auf ein ZWEITES
| temporäres Stringobjekt,
| das es konstruiert hat, zurück.
| Dieses zweite temporäre
| Objekt enthält "My love"
|
| 4. Die Parameterliste der
| startsWith() Methode
| hat jetzt wie gefordert
| eine Referenz auf einen String.
|
+---- 5. Die startsWith() Methode des
durch burns referenzierten Objekts
wird aufgerufen.
6. Die startsWith() Methode
gibt true zurück.
7. Der true-Zweig der if-Anweisung
wird ausgeführt.
Gewöhnlich denken Programmierer nicht in solcher Ausführlichkeit nach, was passiert. Üblicherweise denkt ein Programmierer: Entferne die Leerzeichen eines Strings und schau nach, ob ein anderer damit beginnt." Aber manchmal müssen Sie eine Anweisung sorgfältig analysieren um sicher zu sein, dass Sie das tut, was Sie wollen. Betrachten Sie noch mal die obenstehende Anweisung und überdenken Sie sie in verschiedenen Detailstufen.