自增运算符和+=运算符的另一个作用
先声明一个变量int num = 0;假设要对该变量加一,通常有三种方法:
num = num + 1;
num += 1;
num++;
上述三种都可以使 num 最终结果等于1;
可是上述三种运算它们有什么区别呢?其内部运算性质是一样的吗?答案是否定的。
num = num + 1最终的运算结果是int型;
而 num += num 和 num++ 最终的运算结果的类型取决于num;
这也就是我们要说的另一个作用。
自增运算符和+=运算符不会改变最终运算结果的类型。
(此处只是拿自增和+=运算符举例,自减和 -= 、*= 、/= 、%=其实都不会改变最终运算结果的类型)
举例
比如声明一个short型变量:short num = 0;而此让你对该变量+1,也是有三种方法:
①num = num + 1;
②num += 1;
③num++;
可是上述三句代码,num = num + 1;会报错,原因是:不兼容的类型: 从int转换到short可能会有损失
而num += 1;和num++不会报错,并且运行结果是正确的,说明num += 1;和num++;最终的运算结果是short型,而num = num + 1;最终的运算结果是int型,而用short型去接收一个in型,肯定是会报错的,除非进行强制类型转换。
解释
为什么num = num + 1;会是int型呢?
这是因为 1 是int型的,short + int 最终的结果是int型,这里就涉及java的自动类型转换,num是short型,1 是int型,java会把num给自动转换成int型去与1相加,也就导致num + 1是int型数据,此时再用short型的num去接收int型数据,是会报错的。
运用场景
如果你的num声明的就是int型,你用上述三种方法都可以达成最终的效果,并不会报错。
可是如果你的num是short型或者是byte型,此时上述三种方法就会有区别。如果你希望short型或者byte型自增或者加上一个数,还是short或者byte型,你就不能再使用①方法了。就得去使用②方法或者③方法了。如果是自增1,采用②方法,如果是要自增2及以上的,就采用③方法。