程序如下,请写出该程序的运行结果。
public class Test {
static
{
int x = 5;
}
static int x,y;
public static void main(String args[])
{
x--;
myMethod();
System.out.println( x + y+ ++x );
}
public static void myMethod()
{
y = x++ + ++x;
}
}
程序分析:
首先说一下i++与++i的区别:
i++是i先参与运算再自加,而++i恰好相反,是先自加再参与运算。
其次再说说静态代码块中的x,上篇文章我已经提过,静态代码块是最先执行的,优先于非静态代码块和构造方法,在这道题中其实是起迷惑作用,因为main方法中的x是静态变量x,而不是静态代码块中的x,虽然x没有赋初值,不过java中系统会自动给静态的int型数据赋值为0,非静态的int型数据在使用前是必须初始化的。
所以运行x--代码后 x=-1;
在进入myMethod()方法后,执行y = x++ + ++x 时,执行顺序是这样的:
x先参与运算再自增,此时 y=-1+ ++(0);
而++x是先自增再参与运算,此时 y=-1+1=0;x=1;
下面再讲 x + y+ ++x,因为加法是元素逐一相加所以我们先计算x+y,由上面计算可得 x+y=1;
再计算1+ ++x,和上面一样 x先自增再参与运算,所以x + y+ ++x =1+2=3;
这道题很基础,主要考察i++和++i的区别,其实i++和++i真的很容易弄错,以后使用时要多加小心。