i++和++i是C语言运算符,i++是后缀递增的意思,++i是前缀递增的意思
-
i++是后缀递增的意思,i++是先进行表达式运算,再进行自增运算。把i++的运算过程拆分开,等效于i=i+1可以看到运算结果是一致的。
x = i ++; //先让x变成i的值1,再让i加1
-
++i是前缀递增的意思,++i是先进行自增或者自减运算,再进行表达式运算。运算结果可以发现,仅从i的值来看,++i和i++最终的i值是一样的,都是i自增加了1。
x = ++i; //先让i加1, 再让x变成i的值1
实例:
public static void main(String[] args) {
// 自增变量
int i = 0;
int j = 0;
// 赋值变量
int x = 0;
int y = 0;
// i++ x=i=0 i=i+1=1 ++j y=j+1=1 j=i=1
// i++ x=i=1 i=i+1=2 ++j y=j+1=2 j=i=2
// i++ x=i=2 i=i+1=3 ++j y=j+1=3 j=i=3
for (int z = 0; z < 3; z++) {
x=i++;
y=++j;
System.out.println("自增变量:i="+(i)+",j="+(j)+", 赋值变量:x=" + (x) + ",y=" + (y));
}
}
结论: 赋值变量的值跟自增运算符的特性有关, 但最终自增变量i,j的值是一样的.
public static void main(String[] args) {
int i = 0;
int j = 0;
// i++ i=i=0 i=i+1=1 ++j j=j+1=1 j=i=1
// i++ i=i=1 i=i+1=2 ++j j=j+1=2 j=i=2
// i++ i=i=2 i=i+1=3 ++j j=j+1=3 j=i=3
for (int z = 0; z < 3; z++) {
System.out.println("i=" + (i=i++) + ",j=" + (j=++j));
if (i == 3) {
System.out.println("i++=" + i);
}
if (j == 3) {
System.out.println("++j=" + j);
}
}
}
结果发现i++与++j需要参与赋值并赋值给自己时,由于自增变量特性原因,i的结果一直为0,j=结果为3
在区分这两个之前,我们先来了解一下它们的运算规则
int i=1,a=0;
// i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1
// ++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2
// 当不需要赋值时两者没有区别。
实例:
public class Test {
public static void main(String[] args) {
int i=1,a=0;
System.out.println("a=i++===> "+(a=i++));//1
//System.out.println("a=++i===> "+(a=++i));//2
}
}
i++结果
++i结果
深入解析
public class Test {
public static void main(String[] args) {
int y=0;
int i =0;
y=++y;
y=++y;
y=++y;
y=++y;
y=++y;
System.out.println("y="+y);
i=i++;
i=i++;
i=i++;
i=i++;
i=i++;
System.out.println("i="+i);
}
}
结果
分析如下:
public class Test3 {
public static void main(String[] args) {
int y=0;
//注意"="是赋值,"=="才是相等
//这里的y=++y 是先运算在赋值,先运算++y完了后y的值是1,然后在赋值给原来等于0的y
y=++y;// y==0,++y==y+1; 结果y=++y == y+1 == 0+1 ==1
y=++y;// y==1,++y==y+1; 结果y=++y == y+1 == 1+1 ==2
y=++y;// y==2,++y==y+1; 结果y=++y == y+1 == 2+1 ==3
y=++y;// y==3,++y==y+1; 结果y=++y == y+1 == 3+1 ==4
y=++y;// y==4,++y==y+1; 结果y=++y == y+1 == 4+1 ==5
System.out.println("y="+y);//5
int i =0;
// i==0,i++==0; 结果i=i++ == (记住先赋值后运算)i=i,i=i+1(由于是i++运算这里我们输出的i只取先赋值的结果也就是i=i)
i=i++;// 右边(i=i>0,i=i+1>1),但是 i++是先赋值,在参与运算,所以返回0,最终i=0,然后i又赋值给了全局变量
i=i++;// 右边(i=i>0,i=i+1>1),但是 i++是先赋值,在参与运算,所以返回0,最终i=0,然后i又赋值给了全局变量
i=i++;// 右边(i=i>0,i=i+1>1),但是 i++是先赋值,在参与运算,所以返回0,最终i=0,然后i又赋值给了全局变量
i=i++;// 右边(i=i>0,i=i+1>1),但是 i++是先赋值,在参与运算,所以返回0,最终i=0,然后i又赋值给了全局变量
i=i++;// 右边(i=i>0,i=i+1>1),但是 i++是先赋值,在参与运算,所以返回0,最终i=0,然后i又赋值给了全局变量
System.out.println("i="+i);//0
System.out.println("================");//1
}
}