i = i + 1和i ++之间的差异

Dhr*_*val -1 java casting operators

任何人都可以在这里解决我的困惑是我的代码:

byte i = 0;

i++;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

结果:1

byte i = 0;

i = i+1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

生成编译时错误:类型不匹配:无法从int转换为byte

当我将其转换为字节时: i = (byte) (i+1);然后愉快地得到结果1

执行这个例子我明白i = i + 1&i ++执行不能同样的操作,所以现在我想知道它们之间究竟有什么区别...... !!!

use*_*751 6

i++i+=1隐式地将结果转换回类型i.

所以,如果ibyte,那么i++;不是等同于i = i + 1;-它实际上相当于i = (byte)(i + 1);.

从Java语言规范第15.14.2节开始,强调我的:

...将值1添加到变量的值中,并将总和存储回变量中.在添加之前,对值1和变量的值执行二进制数字提升(第5.6.2节).如果必要,在存储之前,通过缩小的基元转换(第5.1.3节)和/或经过装箱转换(第5.1.7节)将总和缩小到变量的类型.

除了"因为规范如此说明"之外,没有根本原因.编写规范的人最有可能以这种方式编写它,这++对所有数字类型(不仅仅是intlong)都有用.

  • @DhruvRaval你知道`i = i + 1`和`i =(byte)(i + 1)`之间的区别吗? (3认同)