Question 2. Calling currentFoo = currentFoo + 1 when working with results in a new object being created and its reference stored in currentFoo. The compiler doesn't complain because it's not invalid Java - it just results in a new object being created, rather than the current one being updated.