【问题标题】:Casting values and resulting math铸造值和结果数学
【发布时间】:2015-12-31 17:23:52
【问题描述】:
short x, y; 
short z = ((short)x) + ((short)y); 

所以我知道在 Java 中,一个值在相加时被认为是一个整数。这只是语言中的细微差别之一。但是,在这里,我已经将short 转换为变量xy,它仍然给我一个错误提示

无法从 int 转换为 short

【问题讨论】:

标签: java casting int short


【解决方案1】:

所以我知道在 java 中,一个值在添加时被认为是一个整数。

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

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

那是因为您在添加值之前对其进行了转换; +结果 仍然是 int。 (事实上​​,(short)x 是空操作;x 已经short。)

正确的写法是:

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

shorts 被提升为 ints,加在一起,然后我们将结果转换回 short

你的评论:

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

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

  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

【讨论】:

  • 我明白你在说什么,但我仍然不知道为什么首先将 x 和 y 转换为短并将它们放入括号中不会导致短 + 短加法。是否对 x 和 y 分别进行强制转换,然后 java AGAIN 将它们转换回 int?
  • @Borla312: “不知道为什么首先将 x 和 y 转换为短并将它们放入括号中不会导致短 + 短加法” 因为 Java 没有短+短加法。我已经扩展了答案以澄清这一点。
  • 感谢 TJ 非常透彻、详细、清晰的解释!
  • @Borla312:别担心,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多