What are the differences between casting to String, using the toString method, and using the String.valueOf() method?
Casting only transforms the reference to the object from one type to another. Casting does nothing to the underlying object itself. The compiler and/or the runtime engine will verify the fact that the reference that you're casting to a reference to a String is, in fact, referring to an object which is (type compatible with) a String.
The String.value() method allows for the creation of a String representation of the built-in, primitive data types such as int, boolean, float, etc.