The one that annoys me is that people think implicit type conversions are dangerous for some reason, so they also disallowed `char a = 10; short b = a;` without writing a cast even though this makes no sense.
It feels like "sharp edges" often means "I once had a horrible bug due to accidentally misusing this". But if you cut features based on that definition, you'd soon have an empty programming language.
The signedness of `char` is implementation-defined, it is signed on x86 but unsigned on ARM. So assigning a plain char to a wider integer type is suspicious, did the programmer expect sign-extension or zero-extension?
It's not implementation-defined in Java because there aren't any unsigned types.
Personally I think explicit typecasts are even more suspicious, because introducing explicit semantics is worse than implicit semantics if the explicit ones are wrong.