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);	
	}
}



展开阅读全文

没有更多推荐了,返回首页