The former is not true and the latter is true. For shorts1 = 1; s1=s1+1; Since 1 is an int, s1+1 is also an int and requires a cast to assign to short.

Short s1 = 1; s1 += 1; It compiles correctly because s1+= 1; S1 = (short)(s1 + 1); There is an implicit cast.