【Java基础】分析Java中i++和++i的区别

i++和++i是C语言运算符,i++是后缀递增的意思,++i是前缀递增的意思

  1. i++是后缀递增的意思,i++是先进行表达式运算,再进行自增运算。把i++的运算过程拆分开,等效于i=i+1可以看到运算结果是一致的。
    x = i ++; //先让x变成i的值1,再让i加1

  2. ++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
		
		
	}
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墩墩分墩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值