先后问题:先赋值与后赋值的问题。
1.1直接操作 i++和++i
int i = 0;
int j = 0;
i++;
++j;
System.out.println(i);//1
System.out.println(j);//1
可以理解为就是单纯的进行了i=i+1这样的操作,下面的这种情况比较有意思,二者比较区分一下。
1.2 将 i++和++i赋值给其他变量 (会涉及到先后问题)
int i = 0;
int j = 0;
int m = 0;
int n = 0;
m = i++;
n = ++j;
System.out.println(m);//0 先赋值(后加一)
System.out.println(n);//1 先加一后赋值
2.在输出语句里面操作 i++和++i (会涉及到先后问题)
int i = 0;
System.out.println(i++); //0
System.out.println(++i); //2
这里的理解参考了网友的回答,即输出前和输出后;
i++是输出后值才发生变化,所以先输出0,但是存储的变量i的值是1;
++i是输出前值就发生变化,所以在1的基础上再加1,就输出了2;
这里需要和1.1区分一下 为什么输出的一个是1 一个是0?
如果是先i++, 然后再输出的就是1;
如果是在输出里i++的,最后输出的就是0;
我觉得可以这样理解,这里会涉及到先赋值后赋值的问题,在括号外i++的,这个时候变量存储的值已经+1,所以输出i是1;而直接输出的时候,i的值是0,这个时候没有操作,先赋值,就把0输出了,但是这个时候存储的已经变成1,意味着下次用的时候是1了。
3.for循环和while循环里面
int i = 0;
while(i<3){
i++;
System.out.println(i); //1 2 3
}
同1.1 单纯i=i+1 不涉及先后问题
for(int i=0;i<3;i++){
System.out.println(i);// 0 1 2
}
i = 0 0<3 true 走循环;
i = 1 1<3 true 走循环 ;所以也没有什么先后问题,只是自然的循环逻辑。
以上是我遇到过的几种情况 觉得比较容易混淆 故放到这里供自己和大家学习;请大家根据自己的实际情况去理解,其实重要的还是知道有这么几种情况。
补充:
只有在输出语句(2)和赋值语句(1.2)中需要考虑先后的问题,java编程思想说的先执行再生成值,这个先后是什么先后也没说清楚,所以没有办法来根据他所说的先后来分析问题,我完全是自己试出来的。