Java learning: possible lossy conversion from int to short

fault code

short s = 5;
s = s - 2;
error: incompatible types: possible lossy conversion from int to short
        s = s - 2;
              ^
1 error

Correct code

// why below line ok ? ask java compiler.
s -= 2;
s = (short)(s - 2);

Java report error while c/c++ do not even display a warning message

in fact, c++ do the same things like Java do:
Automatic promotion of shot to int, but implicit the conversion.