这里有人能解决我的困惑是我的代码:
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 ++表演不能同样的操作,所以现在我想知道它们之间究竟有什么区别...... !!!
答案 0 :(得分:6)
i++
和i+=1
隐式将结果强制转换为i
类型。
因此,如果i
是byte
,那么i++;
等同于i = i + 1;
- 它实际上相当于i = (byte)(i + 1);
从Java语言规范,section 15.14.2,强调我的:
...将值1添加到变量的值中,并将总和存储回变量中。在添加之前,对值1和变量的值执行二进制数字提升(第5.6.2节)。 如果有必要,通过缩小基元转换(第5.1.3节)来缩小总和,并且/或者在变量类型之前对其进行装箱转换(第5.1.7节)。存储强>
没有根本原因,除了“因为规范如此说明”。编写规范的人最有可能以这种方式编写它,以便++
对所有数字类型(不仅仅是int
和long
)都有用。
答案 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 :内部类型转换自动执行