从今天起,我就一系列的博文来一起讨论下,那些让我们头疼的面试题
第一篇就让我们在这里讨论下关于++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就显而易见了。
第一次发,如有错误请见谅,望各位指出,未完待续