i++ 和++i 的理解 以防面试

Posted lixiuming521125

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i++ 和++i 的理解 以防面试相关的知识,希望对你有一定的参考价值。

根本原理:

//模拟 a++
function afterAdd(){
var temp = a;
a = a+1;
return temp;
}

//模拟++a;
function beforeAdd(){
a = a+1;
return a;
}

 

所以网上找了几个面试题,大家看看:

题目一:输出i的值是多少?

public void test(){
      int i = 0;
      i=i++;
      System.out.println(i);
  }

 

题目二:输出y 和i的值分别是多少?

public class Test3 {
    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);

    }

}

第三题:js中 console.log出来的结果分别是什么

var a = 5,
     b; b = a++ +1; console(b,a); a = 5; c = a-- + --a; console(c,a); a = 5; d = --a + a++; console(d,a);

 

第一题的答案是:0

第一题解析:i= i++;i++原理是:

int temp = i;
i = i+1;
return temp;  

也就是说:i++执行的过程是:temp = 0;  i=1;返回 temp ;即返回0;回到实际的代码里面:i=i++;即 i=0;

注意:这里原理里面的 i= i+1; 的最后i的结果被 实际的代码给覆盖掉了。所以这句话一直是被覆盖。

 

第二题答案:5,0

第二题的解析:++y,比较好理解,所以y=5; x的部分跟第一题是类似的;i++ 结果是 0,

int temp = i; //代入i  int temp = 0;
i = i+1;// 代入i i= 1
return temp;// 返回 0;

  回到代码:

i=i++; 即 i=0;
重复多次后 i=0,所以 输出 i = 0;


第三题的答案:第一个console.long (b,a):6,6;  第二个:console.long (c,a):8,3 ;第二个:console.long (d,a):8,5
第三题的解析:b = a++ +1; a++ 的结果:即
int temp = a; //代入i  int temp = 5;
a = a+1;// 代入i i= 1  a  = 5+1; 即a = 6;
return temp;// 返回 5; 即 a++ 为 5; 

 a++的结果是5,所以 b = 5+1 所以=6;

a的结果是,6;       

第二个:console.long (c,a) :c = a-- + --a;   a--的结果

int temp = a; //代入i  int temp = 5;
a = a-1;// 代入i i= 1  a  = a - 1; 即a = 4;
return temp;// 返回 5; 即 a-- 为 5; 

 --a ,当前 a =4,--a 即 a= 3; 所以 c = 5+3 所以 c = 8,a = 3;

第二个:console.long (d,a) :d = --a + a++;   --a的结果,4; a++的结果:

int temp = a; //代入i  int temp = 4;
a = a+1;// 代入i i= 1  a  = 4 + 1; 即a = 5;
return temp;// 返回 4; 即 a++为 4; 

 a++ 为 4,d= 4+4 所以d=8 a = 5;

 

以上是关于i++ 和++i 的理解 以防面试的主要内容,如果未能解决你的问题,请参考以下文章

金蝶handler中 collection 代码片段理解

从 JVM 层面理解 i++ 和 ++i 的真正区别!

JavaScript 片段

面试-对python的理解

以下代码片段的算法复杂度

面试必备:详解Java I/O流,掌握这些就可以说精通了?