投射值和结果数学

时间:2015-10-03 17:00:39

标签: java casting int short

short x, y; 
short z = ((short)x) + ((short)y); 

所以我理解在Java中,一个值在被添加时被认为是一个整数。这只是语言中的一个细微差别。但是,在这里,我已经将short投射到变量xy,它仍然会给我一个错误说

  

无法从int转换为short

1 个答案:

答案 0 :(得分:6)

  

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

不一定。例如,如果您要添加long,则不会。

  

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

那是因为你在加价之前就投出了价值; +结果仍为int。 (事实上​​,(short)x是禁止操作; x 已经 a short。)

正确的写作方式是:

short z = (short)(x + y);

short被提升为int s,加在一起,然后我们将结果转发回short

重新评论:

  

(我不知道为什么首先将x和y缩短并将它们放入括号中不会导致短+短添加

因为Java 没有添加 short + short。添加的最小尺寸为int,因为the first thing“添加”运算符(+-)的作用是binary numeric promotion

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

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

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

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

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

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

    •   
  4.   

所以short + short(或char + charbyte + byte)变为int + int,产生int。 Java的整数加法为int + int => intlong + long => long