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 ++执行不能同样的操作,所以现在我想知道它们之间究竟有什么区别...... !!!
i++并i+=1隐式地将结果转换回类型i.
所以,如果i是byte,那么i++;是不是等同于i = i + 1;-它实际上相当于i = (byte)(i + 1);.
从Java语言规范第15.14.2节开始,强调我的:
...将值1添加到变量的值中,并将总和存储回变量中.在添加之前,对值1和变量的值执行二进制数字提升(第5.6.2节).如果必要,在存储之前,通过缩小的基元转换(第5.1.3节)和/或经过装箱转换(第5.1.7节)将总和缩小到变量的类型.
除了"因为规范如此说明"之外,没有根本原因.编写规范的人最有可能以这种方式编写它,这++对所有数字类型(不仅仅是int和long)都有用.
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |