No. It does not throw compilation error. As per my understanding 13 is an integer literal and integer literals can be assigned to a float variable without any casting. Also they can be assigned to long and double as well without any casting. These three assignments (an int literal to float, long and double) fall under widening data conversion.
Where as floating point literals are treated as double data type hence can NOT be assigned to float data type as it comes under narrowing data conversion. It requires explicit (casting) f, at the end of the floating point literal, to be assigned to a float data type variable.
Everything is correct except for the part where you say that putting f at the end of the literal is casting. It's not. The letter at the end of a decimal number literal is called a floating point type suffix and it can be any of f, F, d, or D. An F or f suffix will tell Java to treat the literal value as a float, while the D or d suffix will tell Java to treat the literal as a double. When a decimal literal has no suffix, it will be treated as a double by default.
The best ideas are the crazy ones. If you have a crazy idea and it works, it's really valuable.—Kent Beck