java中 关于short a +=1; 与short a=a+1 的问题

/ Java / 0 条评论 / 796 浏览

+= 左右两边类型不同是会自动强制转换 ++ 则不会自动强制转换 short a =0;int b = 1;a +=b; // 少用这个a = a+b;//会出错的 a = (short)( a + b); short a = a+1;要改成short a = (short)( a + 1);//1是int类型你写的那3个没什么大的区别但要注意这个 a = a++;a的值是不会改变的; for(int i =1;i<10;i++){ a=a++; System.out.println(a); } System.out.println(a);

++在前是先自加本身在赋值 ++在后是先赋值本身在自加

short i =1; i=i+1; short i=1;i+=1; 这两有什么区别呢 ? 对两个容量不一样的数据类型的变量进行算术运算时,java会自动将小容量的变量进行精度提升,然后再进行运算,得到的结果类型是提升后的大容量的数据类型.如果将该结果赋值给小容量的数据类型的变量,则必须进行强制的类型转换,否则编译程序会报损失精度错.如楼主示例,用i来表示1: short s1 = 1; int i = 1; 首先,因为short类型是16位的,而int类型是32位的,在进行 (s1+i) 运算时,自动将s1提升到32位,然后与i相加,得到的结果是32位的,而此时 s1=s1+i; 必然报错,因为如果赋值成功,只是把低16位赋给了s1,这个虽然正是楼主想要的结果,但是编译程序却不能判定你的意图是什么. 执行强转: s1=(short)(s1+i); 就没问题了. s1+=i;能编译通过并得到正确结果,而 s1=s1+i; 却报错,是因为它们并不是等价的,s1+=i的方式java会对i进行窄化转换,由编译程序自动执行.