在Java中,借鉴了C和C++中的做法,也提供了自增、自减运算符:n++将变量n的当前值加1,n–则将n的当前值减一。

自增和自减操作看起来很简单,但是却暗藏玄机,稍不注意就可能出错。下面让我们通过两个例子来更好的掌握自增和自减:
(1)

int a=5;
int b=++a + a++;①
System.out.print(a);
System.out.print(b);
请问输出a的值是多少?b的值是多少?在①式计算过程中两个a的值分别是多少?

我想很多人在看到这个式子的时候首先会蒙一下,因为这么多加号,我先算哪里啊?
接下来我为大家一步步分析一下:

首先: b=++a + a++; 我们知道++a是先自增再运算,先自增是优先于整个算式来说的,所以在整个式子开始运算之前,a的值由5变成了6;

其次,我们看a++,a++是先运算再自增,先运算是指等整个算式运算完成之后a++才自增,也就是说我们在计算 b=++a + a++; 完成之前,a++都不会自增;

再来,由于++a使a在整个式子开始运算之前,a的值由5变成了6, 所以 b=6+6=12;
`最后,等整个算式运算完成之后a++自增,a的值由6变为7;

所以,最后输出a的值是7,b的值是12,在①式计算过程中两个a的值分别是6和6。

(2)

package com.qcby.ydzy;

public class QcbyTest {

	public static void main(String\u005B\u005D args) {
		int k=0;
		for(int i=0;i<10;i++)
		{
			k=k++;
			System.out.print(k+" ");
	    }
	}

运算结果为:

java自增运算原理 java中自增自减运算_自增


大家有没有好奇,有没有疑问为什么会是这个结果呢?

接下来让我为大家分析一下:

java自增运算原理 java中自增自减运算_内存地址_02


如上图所示,在JAVA中变量和变量的值是存在不同的内存地址中的,K=K++每运算一次,K都指向一块新的内

存地址,由于K++要等到 K=K++ 运行结束后才能自增,K的初始值为0,即K=K++相当于把K=0赋值给K。 所以

当K++自增的时候,K已经指向了一块新的内存地址单元且值为0,但是K++还是在原来的地址单元中自增的,

如上图所示,而那一块内存地址已经被遗弃,所以并不会影响到K的值,k的值会一直为0,所以K=K++是毫无

意义的,所以大家以后不要再犯这种错误。