Had a difficult time finding a good book to help my 14 year old learn Java. While this book is short and relatively friendly, I wasn't entirely satisfied with it. However, it gave material for him to read when I wasn't around to work on Java projects with him.
I have the 4th edition, and I see that (as I type), a 5th edition is slated to come out in two months. If this author McGrath is reading this review, I hope he fixes the following:
1) Page 30: McGrath writes "The == equality operator compares two operands and will return true if both are exactly equal in value. If both are the same number they are equal, or if both are String values containing the same characters in the same order they are equal."
Yikes! Please add the idea of String literals to the discussion, since, yes, two matching String literals could be found to be the same with ==, but Strings in general cannot. == is for String reference equality, .equals() is for String value equality. Note, the author later gets this right on page 90.
2) Page 86: "...Math.random() method, which returns a double precision random number between 0.0 and 0.999. Multiplying the random number will specify a wider range. For example, multiplying by ten will create a random number in the range of 0.0 to 9.999."
Doing good so far, but then the author writes "Now rounding the random number up with Math.ceil() will ensure it falls within the range of 1-10 inclusive." He goes on in code to do just that.
However, there's a rare case of random returning 0, since the range is [0, 10), and this would cause his approach to fail. That's why coders write Math.floor(Math.random()*10 + 1) instead of Math.ceil(Math.random()*10).
3) The rest is more nitpicking. Might be nice to drop the applets section, or at least describe how they now (don't) work with all the new security constraints. Perhaps beginners don't need to think that jumping to label names is the only way to achieve flow control within double-nested blocks. Etc.