为什么我会收到有关Java中"可能丢失精度"的警告?

Bha*_*dri 3 java

class Test
{
    public static void main(String[] args)
    {
         short s=2,s1=200,s2;
         s2=s+s1; // error: "possible loss of precision"
         System.out.println(s2);
    } 
}
Run Code Online (Sandbox Code Playgroud)

为什么将短路添加两个短路的结果分配给编译错误?

Dir*_*irk 5

因为为了对short执行算术运算,编译器会首先将它们扩展为整数:

S2 = s + s1
Run Code Online (Sandbox Code Playgroud)

实际上是

S2 = (int)s +(int)s1
Run Code Online (Sandbox Code Playgroud)

右手边有int类型.