今天同事扔给我两道面试题,由于我2年前就接触过这道题,所以没啥意思,我看完后扔到一个交流群里,回答这道题的绝大部分人竟然都答错了;很多人很清晰的知道这两道题想考察面试者对 i++ 和 ++i 的理解,也很清晰的知道这二者的区别,但是题还是做不对;两道题如下,大家可以先思考一下,给个答案,然后再去验证自己的想法。
(这是一道典型的看着非常简单的题,但是不少人还是会因为粗心栽跟头)
第一题:
int a = 0;
for (int i = 0; i < 99; i++) {
a = a ++;
}
System.out.println(a);
先在纸上写出自己的答案,然后看
第二题:
int b = 0;
for (int i = 0; i < 99; i++) {
b = ++ b;
}
System.out.println(b);
我估计会有不少人做错,因为群里有开发三四年的人,看了一眼就给出答案,然后就错了。
i++ 和 ++i 在理论上的区别是:
i++:是先把i拿出来使用,然后再+1;
++i :是先把i+1,然后再拿出来使用;
答案见下:
第一题:a=0
第二题:b=99
再升级一下
第三题
Integer a = 0;
int b = 0;
for (int i = 0; i < 99; i++) {
a = a ++;
b = a ++;
}
System.out.println(a);
System.out.println(b);
第三题:a=99,b=98
第四题:
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);
}
}
这里是解释
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++;
i=i++;
i=i++;
i=i++;
System.out.println("i="+i);//0
System.out.println("================");//1
}
}
转载地址: