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?