面试题之i++与++i

    从今天起,我就一系列的博文来一起讨论下,那些让我们头疼的面试题
     第一篇就让我们在这里讨论下关于++i  与 i++ 的关系
     首先要明白的是,这个运算符在这两种情况加载JVM执行情况
     ++i :先增加,后执行
     i++ :先执行,后增加
 可以先用一个例子来看看具体的执行情况
     public class i_test_1 {
       public static void main(String[] args) {
            int i = 1;
            int j = 1; 
            int x = i++ + + +j;
           System.out.println("i="+i);
           System.out.println("j="+j);
           System.out.println("x="+x);
       }
   }
     输出结果:
      i=2   
      j=2   
      x=3
         首先,可以看出i,j两个变量的输出结果一样,
         先看i ,执行了i++,在执行时这个i的值还是1,
         再看j,执行了++j,在执行的同时就先增加了1,即++j 的值为2, 则x的值为3,就不难解释了, 
         但是如果有同学就疑问了了,为什么i的输出结果是2呢?前面说过了 
         i++ 的执行情况是,先执行,再增加1,所以i的输出结果为2,也显而易见了。 
    下面我们来看一道面试题:
          public class i_test_2
   {
        static
        {
             int x = 5;
         } 
           static int x,y;
          public static void main(String args[])
       {
                   x--;  
                  myMethod();
                  System.out.println("sum="+(x + y + ++x));  
         }
            public static void myMethod()
              {
                    y = x++ + ++x;   
               } 
      }
      运行结果:
                 sum=3
              看到这个程序后,首先要明白它的执行流程,
           首先,在程序中main函数是一个程序的切入点,所以就先执行main函数中的代码可以看到程序中存在静态代码块,我们知道静态代码块是在程序加载时就执行的 代码,但是要明白的是这个静态代码块有没有意义,首先静态代码块中也定义了 变量x,但是这里的变量为局部变量,对于程序完全没有影响,所以静态代码块就 没有意义了,在mian函数中的x为成员变量,后面所用到的变量为成员变量x,y。
          下面我们来分析下为什么结果为3:
          首先x,y没有初始化,所以就为默认值,x=0,y=0,
          先执行x--,
           x = -1;
           再调用myMethod(),
           x = 1,y =0;
           在执行时 y = x++ + ++x;   时,先执行++x,x = 0,再执行x++,x = 0; 所以y = 0;
           我们知道x++是在执行之后加1,所以在执行结束后x = 1;
           最后运算(x + y + ++x),
           结果:sum = 1+0+2就显而易见了。
第一次发,如有错误请见谅,望各位指出,未完待续














 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值