= 左右两边类型不同是会自动强制转换 则不会自动强制转换 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进行窄化转换,由编译程序自动执行.