【问题标题】:Adding int to short [duplicate]将int添加到short [重复]
【发布时间】:2012-09-14 07:07:59
【问题描述】:

我的一个同事问我这个问题,我有点困惑。

int i = 123456;
short x = 12;

声明

x += i;

编译正常

x = x + i;

没有

Java 在这里做什么?

【问题讨论】:

  • 您正在尝试将 int 添加到 short 中。 a = b != b = a
  • 您实际上是在将一个 int 添加到一个 short
  • 感兴趣的可以试试这个char ch = '0'; ch *= 1.2; 现在ch是'8' ;)

标签: java


【解决方案1】:
int i = 123456;
short x = 12;
x += i;

其实是

int i = 123456;
short x = 12;
x = (short)(x + i);

x = x + i 就是x = x + i。它不会自动转换为 short,因此会导致错误(x + i 的类型为 int)。


E1 op= E2 形式的复合赋值表达式等价于E1 = (T)((E1) op (E2)),其中TE1 的类型,但E1 只计算一次。

-JLS §15.26.2

【讨论】:

    【解决方案2】:

    整数类型(int、short、char 和 byte)的 + 运算符始终返回 int 作为结果。

    您可以通过以下代码看到:

    //char x = 0;
    //short x = 0;
    //byte x = 0;
    int x = 0;
    x = x + x;
    

    除非xint,否则它不会编译。

    【讨论】:

      【解决方案3】:

      数字被视为int,除非您特别指定它们。因此,在第二个语句中,当您使用文字数字而不是变量时,它不会自动将其转换为适当的类型。

      x = x + (short)1;
      

      ...应该可以工作。

      【讨论】:

      • 我写错了方程式。我更新了我的问题。请参阅其x = x + i
      • 好吧,那为什么 x = x + x;工作?问题不在数字 1 上,而是在返回 int 的 + 运算符上。
      猜你喜欢
      • 2013-05-19
      • 2015-10-21
      • 2023-03-08
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2013-01-19
      相关资源
      最近更新 更多