java 和 的区别_Java中 = 和 += 的区别

问题

1) short s1 = 1; s1 = s1+1;有什么错?

2) short s1 = 1; s1 += 1;有错吗?

讨论

1)+:在编译器将右边的表达式结果计算出来后,和左边的变量类型比较精度,如果左边的变量精度低于右边的结果的精度,编译器会显式的报错,告诉程序员去强制转型。(所以s1 = s1 + 1出错)最后将表达式的结果复制到变量所在的内存区。

2)+=:编译器自动隐式直接将+=运算符后面的操作数强制装换为前面变量的类型,然后在变量所在的内存区上直接根据右边的操作数修改左边变量内存存储的二进制数值(所以 s += 1不报错)最后达到和赋值运算符相同的目的。与前者相比,由于后者是位操作,效率也较前者高。

public class TestEqualOperater {

/**

* += 会把后面的数值自动强制转换为前面的类型,然后在那快内存上直接修改数值;

* = 是会在把后面的数值赋值到前面的变量时检测类型是否相同( 非自动强制转换!)如果是高精度到低精度的,需要报错,告诉程序员会loss of data

*/

public static void main(String[] args) {

short s = 0;

int i = 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】,也可以后台留言与大家一起交流解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值