“i++、i--、++i、--i”等自增自减运算的区别及练习

最近,不论是自己做题的过程中,还是其他小伙伴有时候遇到自增运算总是想不通,于是自己就动手做了些基础练习题,同时获得了些感悟。在这儿也顺便分享给那些还在困惑于自增运算的小伙伴们。感悟有不对之处也请批评指正。

自增自减运算

1.练习一

   public class Demo02 {
       public static void main(String[] args) {
           int b = 4;
           System.out.println(b++);//b++=4,(b=5)
           //注:括号里就是我所理解的暂存值
           System.out.println(b);//b=5
           int x;
           x=b++;//x=5,(b=6)
           System.out.println(x);//x=5
           System.out.println(b);//b=6
       }
   }

感悟:对于后增运算来说,总是先赋值,后运算。“先赋值”,即b++、x=b++为该赋值的值。“后运算”,即b的值已经发生改变,只不过在没有出现下一个b的运算之前进行暂时存放。若下次出现b的运算,则此时b的值为“后运算”或者说之前暂时存放的的值。

2.练习二

  public class Demo02 {
      public static void main(String[] args) {
        	int q = 10;
          int w = 10;
          int e = 10;
          q = w++;
          System.out.println("第一次q="+q);//q=10,(w=11)
          System.out.println("第一次w="+w);//w=11
          e = --q;
          System.out.println("第一次e="+e);//(q=9),e=9
          System.out.println("第二次q="+q);//q=9
          w = ++q;
          System.out.println("第二次w="+w);//q=10,w=10
          System.out.println("第三次q="+q);//q=10
          q = e--;
          System.out.println("第四次q="+q);//q=9,(e=8)
          System.out.println("第二次w="+w);//w=10
          System.out.println("第二次e="+e);//e=8
          System.out.println("第三次e="+--e);//e=7
      }
  }

感悟:对于先增或先减运算来说,总是先运算,后赋值。“先运算”,即–q、e=–q先进行运算,此时q的值已经发生变化。“后赋值”,即将刚才完成运算的值赋给e。

3.练习三

   public class Demo02 {
       public static void main(String[] args) {
           int a1 = 4;
           int b1 =(a1++)+(++a1)+(a1*10);
           System.out.println(a1);//4(5)->6
           System.out.println(b1);//b1=4,(a1=5)+6,(a1=6)+6*10=70
       }
   }

感悟:即使在一行中,自增运算的规则依然执行。

4.练习四

  public class Demo02 {
      public static void main(String[] args) {
          int i = 1;
          i = i++;//i:1,(i=2)
          //前面是我最开始想的,后面是正确答案
          System.out.println(i);//i:2//i:1
          int j = i++;//j=i:2,(i=3)//j:1,(i=2)
          int k = i+(++i*i++);//k=3+[4*4(i=5)]//k=2+[3*3(i=4)]
          System.out.println(i);//i:5//i:4
          System.out.println(j);//j:2//j:1
          System.out.println(k);//k:19//k:11
          /*
          正确答案:i=1,j=1,i=4,k=11。
           */
      }
  }

感悟:输出的i并不是i++中暂存的值。

5.练习五

   public class Demo02 {
       public static void main(String[] args) {
           boolean aa = 100>1;
           boolean bb = 10<100;
           int ee=10;
           boolean b3 = aa&&(1>ee++);//短路与,(1>ee++)为false,但ee++运算继续执行
           System.out.println(ee);//ee=11
           System.out.println(b3);//flase
       }
   }

6.练习六

   public class Demo02_1 {
       public static void main(String[] args) {
           int n1 = 3;
           int n2 = 5;
           int n = n2++;
           System.out.println("n="+n);//n=5,(n2=6)
           System.out.println("n2="+n2);//n2=6
           n = ++n2;
           System.out.println("n="+n);//(n2=7),n=7
           System.out.println("n2="+n2);//n2=7
           n = --n1;
           System.out.println("n="+n);//(n1=2),n=2
           System.out.println("n1="+n1);//n1=2
           n = n1--;
           System.out.println("n="+n);//n=2,(n1=1)
           System.out.println("n1="+n1);//n1=1
       }
   }
参与逻辑运算符的自增运算

1.练习一

   public class Demo02_1 {
       public static void main(String[] args) {
           int x = 1;
           int y = 1;
           if(x++==2 & ++y==2){//1!=2,与运算,++y==2继续运算
               x=7;
           }
           System.out.println("x="+x+",y="+y);//x=2,y=2
       }
   }

感悟:与运算:前为false,后面的运算继续判断。即参与的自增运算也执行。

2.练习二

   public class Demo02_1 {
       public static void main(String[] args) {
           int x = 1;
           int y = 1;
           if(x++==2 && ++y==2){//1!=2,短路与
               x=7;
           }
           System.out.println("x="+x+",y="+y);//x=2,y=1
       }
   }

感悟:短路与:前为false,后面的关系直接不用判断。即自增运算也不进行。

3.练习三

   public class Demo02_1 {
       public static void main(String[] args) {
           int x = 1;
           int y = 1;
           if(x++==2 | ++y==2){//1!=2,或运算,2=2
               x=7;
           }
           System.out.println("x="+x+",y="+y);//x=7,y=2
       }
   }

4.练习四

  public class Demo02_1 {
      public static void main(String[] args) {
          int x = 1;
          int y = 1;
          if(x++==2 || ++y==2){//1!=2,短路或,2=2
              x=7;
          }
          System.out.println("x="+x+",y="+y);//x=7,y=2
      }
  }

感悟:或运算、短路或:前为false,后面的运算继续判断。即参与的自增运算也执行。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值