黑马程序员技术交流社区
标题:
a+=4与a=a+4的不同
[打印本页]
作者:
海狮
时间:
2015-10-18 23:58
标题:
a+=4与a=a+4的不同
本帖最后由 海狮 于 2015-10-19 00:23 编辑
=a+4
与
a+=4
有所不同
程序一:
class TestDemo{
public static void main(String[] arg){
short a =8;
a+=4;
System.out.println(a);//
结果为
12}}
程序二:
class TestDemo{
public static void main(String[] arg){
short a =8;
a=a+4;
System.out.println(a);}}
结果出现编译错误:
TestDemo.java:4:
错误
:
不兼容的类型
:
从
int
转换到
short
可能会有损失
a=a+4;
^
1
个错误
原因:执行
s+=4;
时。编译器自动把
short
类型的变量
a
转为
int
类型再参与运算,然后把
int
类型结果强制转换为
short
;而
s=s+4
;编译器不进行强制转换。所以
int
类型结果赋值给
short
类型出现错误。
作者:
ash午夜阳光
时间:
2015-10-19 00:12
前者有强制类型的转换
作者:
fenger7
时间:
2015-10-19 06:47
其实这个还不是太懂
作者:
shiawase
时间:
2015-10-19 09:34
加油!加油!加油!加油!加油!加油!加油!加油!
作者:
LLLLL
时间:
2015-10-19 10:41
加油!加油!加油!加油!加油!加油!加油!加油!
作者:
q2209617
时间:
2015-10-19 12:04
是后者有强制转换功能
作者:
田策
时间:
2015-10-19 13:06
后者有强制类型转换,开发建议用后者
作者:
feng_ye
时间:
2015-10-19 13:14
a+=4会强制转换类型,a = a+4;a+4会自动转换转成int类型
作者:
田策
时间:
2015-10-19 13:34
恩,格式是正确的
作者:
奔跑的小红帽
时间:
2015-10-19 21:31
编译器在执行的过程中无法判断变量s的值,s可能超过short的取值范围,所以会报错,损失精度
作者:
爨oooo
时间:
2015-10-19 21:39
看了你的代码,我很是头疼
作者:
潘_洋
时间:
2015-10-20 10:39
a=a+4;是变量和常量相加,系统会默认变量为int类型,当int类型的a加4以后还是一个int类型变量,将一个int类型的变量赋值给short类型时就会报错;a+=4;是先将a的类型转换为int类型,进行计算,然后相加,将计算结果赋值给short类型的变量,Java虚拟机会判断这个结果(常量)在不在short范围内,如果在,赋值成功。
作者:
Sayman
时间:
2015-10-20 14:40
a += 4 相当于 a = (short)(a+4)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2