玖叶教程网

前端编程开发入门

java中short m =1; m=m+1;与short m=1;m+=1;的区别

典型的java面试题

short m = 1;

m= m + 1; //(编译报错)

short m = 1;

m+= 1;

这两者有什么区别呢 ?

java中对两个容量不一样数据类型的变量进行算术运算时,java会自动将小容量的变量转换成容量大的数据类型(也可以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。),进行精度提升,然后再进行算术运算,得到的运算结果类型是提升后的大容量的数据类型。

如果将该预算结果赋值给小容量数据类型的变量,则必须进行强制的类型转换,否则编译程序会报损失精度错。如用n来表示1,将上面的运算翻译成下面:

short m = 1;

int n = 1;

m = m+n;

因为short类型是16位,而int类型是32位,在进行(m+n) 运算时,java自动将m提升到32位,然后与n相加后,得到的结果是32位的,而此时m = m + n,相当于把int型(32位)位转成了short型(16位) 必然报错,要想编译不报错,需要执行数据类型强转:

m = (short) (m + n); 这样就没问题了。

而m += n;能编译通过并得到正确结果,而 m = m + n; 却报错,是因为它们并不是等价的,m += n的方式java会对n进行数据类型窄化转换,由java编译程序自动执行。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言