投射值和结果数学

Bor*_*312 3 java int casting short

short x, y; 
short z = ((short)x) + ((short)y); 
Run Code Online (Sandbox Code Playgroud)

所以我理解在Java中,一个值在被添加时被认为是一个整数.这只是语言中的一个细微差别.然而,在这里,我已经铸造short的变量xy它仍然给了我一个错误说,

无法从int转换为short

T.J*_*der 6

所以我理解在java中,一个值在被添加时被认为是一个整数.

不必要.long例如,如果您要添加s,则不会.

但是,在这里,我已经对变量x和y进行了简短的说明,它仍然给出了一个错误,说不能从int转换为short.

那是因为你在加入之前就投出了价值; 该结果+仍然是一个int.(事实上,(short)x是一个空操作; xshort).

写这个的正确方法是:

short z = (short)(x + y);
Run Code Online (Sandbox Code Playgroud)

short小号提升为intS,加在一起,然后我们把结果回落到一个short.

你的评论:

(我)不确定为什么首先将x和y缩短并将它们放入括号中不会导致短+短的加法

因为Java 没有 short + short添加.它添加的最小尺寸是int,因为"添加"运算符(和)做的第一件事二进制数字促销:+-

  1. 如果任何操作数是引用类型,则进行拆箱转换(第5.1.8节).

  2. 应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:

    • 如果任一操作数是类型double,则另一个操作数转换为double.

    • 否则,如果任一操作数的类型为float , the other is converted tofloat`.

    • 否则,如果任一操作数是类型long,则另一个操作数转换为long.

    • 否则,两个操作数都将转换为类型int.

所以short + short(或char + char,或byte + byte)变得int + int屈服int.该唯一整数加法Java有有int + int => intlong + long => long.