代码:
public class Test {
public void method1() {
short i = 10;
// 不报错
i += 10;
}
public void method2() {
short i = 10;
// 报错
i = i + 10;
}
}
解释:
上述代码中出现了i += 10
就不报错,而i = i + 10
就报错,错误信息如下图:
以上错误的意思就是类型不兼容,需要的是short类型
,但是生成的是int类型
,这个可以理解,毕竟10
是int类型
,而i是short类型
,最终生成的结果肯定int类型
,因此这个错误是可以理解的,但是为什么同样是short类型
的i
,并且i
也是10
,然而i+=10
就没有报错呢,如果想要理解这个问题,就需要看字节码文件了
我将method2()方法暂时注释,然后编译该类并分析method1()
方法的字节码文件,结果如下图所示:
官网中对i2s
的解释如下:
拓展:
如果i是int类型的,那么i + = 10 和 i += 10有什么区别呢,让我们一起来见证吧,具体代码如下:
public class Test {
public void method1() {
int i = 10;
i += 10;
}
public void method2() {
int i = 10;
i = i + 10;
}
}
解释: