Prefix 1 matches. Prefix 2 fails. Prefix 3 fails. Prefix 4 matches.
String Operations
Here is how the last if of the program worked:
String burns = "My love is like a red, red rose.";
. . . . . .
if ( burns.startsWith( " My love".trim() ) )
System.out.println( "Prefix 4 matches." ); <-- this branch executes
else
System.out.println( "Prefix 4 fails." );
The String " My love" starts with two spaces,
so it does not match the start of the String referenced by burns.
However, its trim() method is called,
which creates a new String without those leading spaces:
if ( burns.startsWith( " My love".trim() ) )
-----+---- -----+-----
| |
| |
| +------- 1. A temporary String object
| is constructed.
| This temporary object
| contains " My love"
|
| 2. The trim() method of the
| temp object is called.
|
| 3. The trim() method returns
| a reference to a SECOND
| temporary String object
| which it has constructed.
| This second temporary
| object contains "My love"
|
| 4. The parameter of the
| startsWith() method
| now is a reference to
| a String, as required.
|
+---- 5. The startsWith() method of
the object referenced by
burns is called.
6. The startsWith() method
returns true
7. The true-branch of the
if-statement exectutes.
Programmers usually do not think about what happens in such detail.
Usually,
a programmer
thinks:
"trim the spaces of one String and see if it is the prefix of another."
But sometimes,
you need to analyze a statement carefully to be sure it
does what you want.
Look again at the above statement
and practice thinking about it at several levels of detail.
What does the toLowerCase() method of class String do?