i++类的面试题注意运算符的优先级
1.下列程序输出的结果是多少?
public class Test34 {
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;
System.out.println("myMethod中的y="+y);
System.out.println("myMethod中的x="+x);
}
}
输出的结果为
题目解析
题目解析
public class Test34 {
static {int x = 5;} //步骤1:在第一次被载入JVM时运行,但是由于是局部变量,x=5不影响后面的值。
static int x,y; //初始化时x=0;y=0;
public static void main(String[] args) {
x--;
System.out.println(x); //步骤1:在运行myMethod();之前,x是-1,开始调用myMethod()函数。
myMethod();//步骤4:在运行myMethod();之后x是1,y是0。
System.out.println(x + y++ +x);//步骤5:运行x+(y++)+x=1+0+1=2。
}
public static void myMethod() {
y = x++ + ++x;
System.out.println("myMethod中的y="+y);//步骤2:进入myMethod()运行y=(x++)+(++x)后y=0
System.out.println("myMethod中的x="+x);//步骤3:此时x=1
}
}
Java运算符的优先级
自增自减运算符、算术运算符、位运算符、关系运算符、逻辑运算符、赋值运算符的优先级依次递减。如下表所示