i = i + 1&之间的差异我++

时间:2015-04-07 11:44:43

标签: java casting operators

这里有人能解决我的困惑是我的代码:

byte i = 0;

i++;
System.out.println(i);

结果: 1

byte i = 0;

i = i+1;
System.out.println(i);

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

当我将其转换为字节时: i = (byte) (i+1); 然后很高兴获得结果 1 < / p>

执行此示例我理解i = i + 1&amp; i ++表演不能同样的操作,所以现在我想知道它们之间究竟有什么区别...... !!!

3 个答案:

答案 0 :(得分:6)

i++i+=1隐式将结果强制转换为i类型。

因此,如果ibyte,那么i++; 等同于i = i + 1; - 它实际上相当于i = (byte)(i + 1);

从Java语言规范,section 15.14.2,强调我的:

  

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

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

答案 1 :(得分:2)

内部为 short,char,byte和int 数据类型,如果执行任何算术运算,编译器会将数据类型升级为 int 并执行操作。编译器会将表达式结果值的数据类型更改为 int

所以对于字节i

i = i+1; // will not work

因为i+1将导致整数数据类型值。所以你必须在外部进行类型转换

i = (byte)(i+1); // this is equivalent to i +=1; or you can say i++;

答案 2 :(得分:-4)

最后我发现我的问题(问题)优越,所以在这里描述它可以轻松地理解其他人。!!!

1&GT; i = i + 1

在java中,只要任何算术运算在两个或多个变量之间执行,那么它的返回值的类型取决于这个等式:

  

返回值类型=(int,VARIABLE-1的最大范围,最大范围   OF VARIABLE-N)

此处,返回值类型: int

对于eqution (int,byte,byte)所以int有最大范围..

byte - &gt; 1字节大小&amp; int - &gt; 4字节大小

这就是为什么上面的exe我不能直接在byte中存储返回值它需要外部类型转换 i =(byte)(i + 1)

2 - ;的 i ++在

在java中,每当增量&amp;递减操作执行类似这些它的返回值的类型取决于这个等式:

  

返回值类型=(VARIABLE TYPE,VALUE + 1)

这些等式表示内部类型转换在这种情况下执行

必须记住:

案例1 如果需要,外部类型广告需要

案例2 内部类型转换自动执行