下面的程序对一个变量重复的进行增量操作,然后打印它的值,那么打印输出是什么?
public class Increment{
public static void main(String[] args){
int j=0;
for(int i=0;i<100;i++){
j = j++;
}
System.out.println(j);
}
}
乍一看,这个程序输出是100,但实际运行后,输出为0.
问题就是在增量操作的语句上:
j = j++;
当++操作符被置于一个变量值之后,其作用是一个后缀增量操作符:表达式j++的值等于j在执行增量操作之前的初始值,因此,这个语句首先保存j的值,然后将j设置为其值加一,最后将j复位到它的初始值,换句话说,这个赋值操作等价于下面的语句序列:
int tmp = j;
j = j + 1;
j = tmp;
程序重复100次之后,j的值还是等于它在循环之前的值,即0;
修正这个程序只需从循环中移除无关的赋值操作,只留下:
for(int i=0;i<100;i++){
j++;
}
不要在单个的表达式中对相同的变量赋值超过一次。