byte i=0;
i++;
byte i=0;
i=i+1;
我知道在I+1
的情况下,整个值显式地增加了1(这将是int
值),因此会出现编译问题,但在I++
的情况下,它也会这样做,但没有得到任何错误。
每当在两个不同类型的操作数之间执行二进制运算时,其中一个操作数将提升为更高的类型。然后运算的结果就是那种类型的。
因此,在您的示例中,字节
类型a首先被提升为int
,因为1
是int
类型。然后在加法操作之后,结果类型为int
。现在,由于不能将int
分配给byte
,因此需要进行类型转换以删除编译器错误:
byte a = 2;
a = a + 1; // Error: Cannot assign an int value to byte
a = (byte)(a + 1); // OK
现在,在复合赋值运算符的情况下,类型转换是隐式地为您完成的。表达式:
a += 1
a = (byte)(a + 1);
形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,只不过E1只计算一次。
前缀增量运算符和后缀增量运算符的情况类似。
根据JLS-§15.15一元运算符:
在Java中
C++ 重载运算符和重载函数 递增运算符( ++ )和递减运算符( -- )是 C++ 语言中两个重要的一元运算符。 下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( -- )。#include <iostream> using namespace std; class Time { private: int hours; // 0 到
问题内容: 为什么当我在做时它起作用,但是当我在做时: 它不起作用? 为什么,以及如何解决? 完整代码: 但是这段代码可以正常工作: JSFiddle:https ://jsfiddle.net/69z2wepo/55100/ 问题答案: 这样一来,您就可以改变状态,因为它和做是同一件事。您永远不要改变状态(请参阅https://facebook.github.io/react/docs/comp
问题内容: 我对post 和pre 运算符感到困惑,例如以下代码 会打印10吗? 它打印10,但我希望它应该打印11 但是当我这样做 它会按照我的预期输出11,所以为什么x = x ++; 不会改变x的值? 问题答案: 否,正确的打印输出为10。理解结果背后原因的关键是预分配和后分配复合分配之间的差异。当使用预增量时,表达式的值在执行增量后获取。但是,当您使用后递增时,表达式的值 在 递增 之前
考虑以下片段: 在\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\一切工作完美,我得到打印出来的屏幕。 在中,我做了完全相同的操作,希望从参数包中读取。然而,我明白了 我做错了什么?人们会认为事情会完全一样,我只是替换了操作
增量运算符++将1添加到其操作数,减量运算符 - 从其操作数中减去1。 因此 - x = x+1; is the same as x++; 同样 - x = x-1; is the same as x--; 递增和递减运算符都可以在操作数之前(前缀)或后跟(后缀)。 例如 - x = x+1; can be written as ++x; // prefix form 或者 - x++; /