在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中变量和变量的值是存在不同的内存地址中的,K=K++每运算一次,K都指向一块新的内
存地址,由于K++要等到 K=K++ 运行结束后才能自增,K的初始值为0,即K=K++相当于把K=0赋值给K。 所以
当K++自增的时候,K已经指向了一块新的内存地址单元且值为0,但是K++还是在原来的地址单元中自增的,
如上图所示,而那一块内存地址已经被遗弃,所以并不会影响到K的值,k的值会一直为0,所以K=K++是毫无
意义的,所以大家以后不要再犯这种错误。