When I check my answers for review questions of chapter 3 I saw that my answer of #14 question is correct. But I look at explanation of this question I know that I think wrong in really. Because I forget one detail in this question. I remember substring don't change StringBuilder when I saw explanation. If option B returns "avaJ" I would choose it as correct answer. If we run this code we saw that option B returns "Java" so I didn't consider it as correct answer.
But explanation of #14 is written:
Option B is a nice distraction it does in fact return "avaJ". However, substring() returns a String, which is not stored anywhere.
Probably authors forget to put comment puzzle.reverse(); when run this code.
The answers given in the book are correct: A and C will print the required avaJ.
The explanation why B is wrong, is wrong itself If you would print the String returned by option B Java is indeed printed and not avaJ. Therefore it's definitely an incorrect answer (as mentioned in the book). But with the code as-is it's also not a nice distraction as the book suggests. To be a nice distraction option B should be replaced withWith this statement the explanation why B is wrong, would be correct.
And what about the last part of the eplanation of this question: and length() counts starting with 1? Does length() not start with 0? Although I understand what's meant here, I wonder if it would not be better (as in more obvious/clear) to just state that length() just returns the character count.