The exact details (e.g., the name used for the bad cast exception) varies, but the basic principle remains mostly similar (though, if memory serves, Java does make casts applied to the few non-object types like int much closer to C casts -- but these types are used rarely enough that 1) I do not remember that for sure, and 2) even if it is true, it does not matter much anyway).