问题
1) short s1 = 1; s1 = s1+1;有什么错?
2) short s1 = 1; s1 += 1;有错吗?
讨论
1)+:在编译器将右边的表达式结果计算出来后,和左边的变量类型比较精度,如果左边的变量精度低于右边的结果的精度,编译器会显式的报错,告诉程序员去强制转型。(所以s1 = s1 + 1出错)最后将表达式的结果复制到变量所在的内存区。
2)+=:编译器自动隐式直接将+=运算符后面的操作数强制装换为前面变量的类型,然后在变量所在的内存区上直接根据右边的操作数修改左边变量内存存储的二进制数值(所以 s += 1不报错)最后达到和赋值运算符相同的目的。与前者相比,由于后者是位操作,效率也较前者高。
publicclassTestEqualOperater{
/**
* += 会把后面的数值自动强制转换为前面的类型,然后在那快内存上直接修改数值;
* = 是会在把后面的数值赋值到前面的变量时检测类型是否相同( 非自动强制转换!)如果是高精度到低精度的,需要报错,告诉程序员会loss of data
*/
publicstaticvoidmain(String[] args){
shorts =0;
inti =32768;//1000 0000 0000 0000
//int j = 32767;// 111 1111 1111 1111
//System.out.println(Integer.toBinaryString(ii));
s += i;
//s = s + i;
System.out.println((short)32768);
System.out.println(s);
}
}
* 声明:转载文章和图片均来自公开网络,版权归作者本人所有。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
如果您在Java学习的过程中遇到难题,欢迎关注【潭州筑梦Java】,也可以后台留言与大家一起交流解决!
网友评论