Answer:

Prefix 1 matches.
Prefix 2 fails.
Prefix 3 fails.
Prefix 4 matches.

Cascaded 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.

QUESTION 18:

What does the toLowerCase() method of class String do?