When you cast reference types (not primitive types), then not much at all happens. The cast is then just a way to tell the compiler: "look, I know that this variable refers to an object of type X, so I want you to treat it that way". It doesn't do any automatic conversion of objects. It does, however, at runtime perform a check to see if the variable really refers to an object of type X, and if it doesn't, you get a ClassCastException.
Conversion of an int or a long value to float, or of a long value to double, may result in loss of precision-that is, the result may lose some of the least significant bits of the value. In this case, the resulting floating-point value will be a correctly rounded version of the integer value, using IEEE 754 round-to-nearest mode (§4.2.4).