对于Java里面的自增说明

自增分为前自增和后自增,也就是常说的前加加和后加加。它们作为单目运算符,作用在不同类型的变量类型身上会有不同的效果。


共性:它们最后的结果都会使变量对应的值进行加一操作。

区别:如果结合赋值运算符进行运算时,前自增是先将变量对于的值加一之后,然后再进行赋值操作。而后自增则是先将变量对应的值进行赋值操作,然后再进行加一的操作。


由于对特定类型进行自增操作,会存在一个强制类型转换问题,因此当某一个类型进行自增操作时,结果应该用相同类型的变量来进行接收

1. 对于整数类型的自增操作

1.1 byte、short、char

这三种基本数据类型,任何排列组合进行运算,结果都会转为int类型,但是自增操作会有一个强制类型转换操作。因此必须注意区别~~~

byte b = 3;
				byte c = b++;
				byte d = ++b;
				System.out.println("b="+b+"\t"+"c="+c+"\t"+"d="+d);
				//结果分别为:b = 5    c = 3  d = 5

这里的b++的实质就是b= (byte) b+1;同理,对于shortchar来说,也是一样。

疑问?为什么 byte b = 3不报错?
其实这是编译器的一个原理,它先会查找所赋的值是否在byte所能容纳的范围内,如果在这个范围内,就可以赋值成功,反之,就会报错~~

1.2 int、long

对于int和long的原理也是类似,它们自增后,也仍然保持自己原有的类型不变。

2.对于浮点数的自增操作

浮点数也是一样的,自增后,仍然保持原有的类型不变。

3.扩展

3.1 和自增类似能保持类型不变的情况就是扩展的赋值运算符,+=、-=、*=、/=、%=,它们和上面的规则一样,都满足运算之后,仍然保持原有的类型不变。

short c = 12;
				c+=5;
				System.out.println("c="+c);
				//c = 17,此时c的类型仍然为short类型,并不是int类型!

3.2 神奇的自增

byte i = 12;
				i = i++;
				System.out.println("i="+i);
				// i = 12;

初次看到,肯定会写13,但是是错的!它其实是jvm给我们默认初始化了一个临时变量进行存储。真正的过程是这样的:

byte i = 12;
				byte temp = i;
				i = (byte) i+1;
				i = temp;

上面就是真正的过程,至于强制类型转换参考上面的运算规则~~