The "unknown value" must be an unquoted string. If it is unquoted, it is treated as an attribute or implicit object, and if there is no attribute/object with that name it will be evaluated (in this arithmetical context) to 0. When the string is quoted and doesn't contain a number (such as "1"), the compiler doesn't know how to deal with it and throws an error. Quoted numbers are converted to primitives.
Actually, you do need to know about the wrapper pools. Keith's advice is correct, and also extends to pooled instances of Byte, Character (between values of 0 and 127) Short (between -128 and 127), and Boolean.
[ April 05, 2006: Message edited by: Matthew Harkonen ] [ April 05, 2006: Message edited by: Matthew Harkonen ]
By making the class variables private, synchronizing the methods that utilize them helps ensure thread safety. Since you should do this anyways, it cuts down on the need for syncrhonized vars.
I ordered the book from Chapters.ca (a Canadian competitor to Amazon) a few days ago; I received an email from them this evening stating that my order is en route to me. I should receive it tomorrow.