无法使用表达式但使用增量运算符来递增字节值

MaheshVarma

为什么以下有效

byte i=0;
i++;

如下无效

byte i=0;
i=i+1;

这是什么原因?

我知道在i+1整个值显式增加1(将是int值)的情况下,将发生编译问题,但在i++相同的情况下却没有得到任何错误。

拉卡纳

每当您在两个不同类型的操作数之间执行二进制运算时,其中一个操作数将被提升为更高类型。然后,运算结果就是该类型。

因此,在您的情况下,byte类型a首先被提升为int,因为1它是int类型。然后在加法运算之后,结果为type int现在,由于您无法将分配intbyte,因此您需要进行类型转换以消除编译器错误:

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);

这是在JLS- §15.26.2复合赋值运算符中指定的:

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

前缀增量运算符和后缀增量运算符的情况相似。

根据JLS- §15.15一元运算符:

The type of the prefix increment expression is the type of the variable.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Bash中的复杂条件表达式中使用逻辑非运算符?

来自分类Dev

如何通过ANY数组运算符使用正则表达式

来自分类Dev

由右值分配的三元表达式不使用移动分配运算符

来自分类Dev

为什么使用运算符`$`比使用`.jcall`表达式要花很多时间

来自分类Dev

'await'运算符只能与异步lambda表达式一起使用

来自分类Dev

不以sizeof(++ n)表达式调用增量运算符

来自分类Dev

在linq中使用运算符进行多个groupby显示与使用表达式不同

来自分类Dev

无法在Lambda表达式中使用C#IS运算符?

来自分类Dev

'await'运算符只能在异步lambda表达式错误中使用

来自分类Dev

在Kotlin中使用Elvis运算符时,如何取反布尔表达式?

来自分类Dev

使用OR运算符的Lambda表达式

来自分类Dev

无法在mongodb中的$ in运算符中使用正则表达式

来自分类Dev

C#-无法在Lambda表达式中使用“ is”运算符

来自分类Dev

可以在if语句中使用赋值运算符。好像使用了布尔表达式

来自分类Dev

AST设计-增量运算符是语句还是表达式?

来自分类Dev

如何使用正则表达式从线性表达式的特定部分提取运算符

来自分类Dev

<<运算符无法正确计算表达式

来自分类Dev

在CASE WHEN中使用IN运算符,在GROUP BY表达式中使用SQL

来自分类Dev

如何在正则表达式.Net中使用AND运算符和NOT运算符

来自分类Dev

使用OR运算符的Python正则表达式

来自分类Dev

使用或运算符的相似测试表达式?

来自分类Dev

如何使用正则表达式匹配包含嵌套括号的SQL IN运算符的表达式?

来自分类Dev

在布尔表达式中使用=>运算符

来自分类Dev

C ++使用正则表达式搜索“正则表达式运算符”

来自分类Dev

使用 AND NOT 运算符的正则表达式

来自分类Dev

使用前缀增量运算符和括号优先级澄清数学表达式

来自分类Dev

在 PHP 中使用 OR 运算符而不是 true 或 false 获取文字表达式值

来自分类Dev

带有来自评估顺序或临时对象的预增量运算符的错误表达式?

来自分类Dev

在 XPath 表达式中使用 OR 运算符

Related 相关文章

  1. 1

    如何在Bash中的复杂条件表达式中使用逻辑非运算符?

  2. 2

    如何通过ANY数组运算符使用正则表达式

  3. 3

    由右值分配的三元表达式不使用移动分配运算符

  4. 4

    为什么使用运算符`$`比使用`.jcall`表达式要花很多时间

  5. 5

    'await'运算符只能与异步lambda表达式一起使用

  6. 6

    不以sizeof(++ n)表达式调用增量运算符

  7. 7

    在linq中使用运算符进行多个groupby显示与使用表达式不同

  8. 8

    无法在Lambda表达式中使用C#IS运算符?

  9. 9

    'await'运算符只能在异步lambda表达式错误中使用

  10. 10

    在Kotlin中使用Elvis运算符时,如何取反布尔表达式?

  11. 11

    使用OR运算符的Lambda表达式

  12. 12

    无法在mongodb中的$ in运算符中使用正则表达式

  13. 13

    C#-无法在Lambda表达式中使用“ is”运算符

  14. 14

    可以在if语句中使用赋值运算符。好像使用了布尔表达式

  15. 15

    AST设计-增量运算符是语句还是表达式?

  16. 16

    如何使用正则表达式从线性表达式的特定部分提取运算符

  17. 17

    <<运算符无法正确计算表达式

  18. 18

    在CASE WHEN中使用IN运算符,在GROUP BY表达式中使用SQL

  19. 19

    如何在正则表达式.Net中使用AND运算符和NOT运算符

  20. 20

    使用OR运算符的Python正则表达式

  21. 21

    使用或运算符的相似测试表达式?

  22. 22

    如何使用正则表达式匹配包含嵌套括号的SQL IN运算符的表达式?

  23. 23

    在布尔表达式中使用=>运算符

  24. 24

    C ++使用正则表达式搜索“正则表达式运算符”

  25. 25

    使用 AND NOT 运算符的正则表达式

  26. 26

    使用前缀增量运算符和括号优先级澄清数学表达式

  27. 27

    在 PHP 中使用 OR 运算符而不是 true 或 false 获取文字表达式值

  28. 28

    带有来自评估顺序或临时对象的预增量运算符的错误表达式?

  29. 29

    在 XPath 表达式中使用 OR 运算符

热门标签

归档