根本原理:
//模拟 a++ function afterAdd(){ var temp = a; a = a+1; return temp; } //模拟++a; function beforeAdd(){ a = a+1; return a; }
所以网上找了几个面试题,大家看看:
题目一:输出i的值是多少?
1
2
3
4
5
|
public void test(){ int i = 0 ; i=i++; System.out.println(i); } |
题目二:输出y 和i的值分别是多少?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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出来的结果分别是什么
1
2
3
4
5
6
7
8
9
|
var a = 5,<br data-filtered= "filtered" > 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,
1
2
3
|
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++ 的结果:即
1
2
3
|
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--的结果
1
2
3
|
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++的结果:
1
2
3
|
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;