我一点一点给你解毒,首先是第一个代码byte a=4; 在java里所以的变量都有数据类型,这里的这句代码等号左边是byte类型的a 右边是一个4,在java中所有的整数类型默认为int类型所以,4为int类型。既然4是int类型,int类型是占4个字节而byte占1个字节,为什么int类型的4可以赋值给byte类型的a呢,这是因为jvm(java虚拟机)中有一个自动检测,检测你等式右边的变量是不是属于byte类型,如果属于,那么可以直接赋值,如果超出这个范围,就会报错。比如说如果你这么写byte a =12345;就会报错,12345超出了byte所承受的最大取值范围。好了,然后咱们继续解答第二句话,a= a+4,在计算机中,我们读代码应该这么读,把a+4的值赋予a,既然是把a+4的值赋予a,因为a是byte类型的,4是int类型的,a+4会自动提升为int类型的,因为a是byte类型的,如果把a+4赋值给a,jvm(java虚拟机会自动判断a+4是不是属于byte的取值范围),但是a是一个变量,有不确定性,所以a=a+4会报错。 a+=4这句话中,你可以理解为a=a+4,但是a+=4这里包含了一个隐式的类型转换,也就是可以把a+=4写成a=(byte)a+4,前面说了,因为a+4是int类型的,我们要赋值给byte类型的a是不可以的,所以只能通过强制转换,而+=这个符号默认就有强转的功能,效率要比a=a+4要高 |