1)
1 public class Test { 2 static { 3 int x = 5; //x是局部变量,不影响后边的值。 4 System.out.println(x); 5 } 6 static int x,y; //x和y是全局变量,初始化后x=0,y=0。 7 public static void main(String[] args) { 8 x--; 9 System.out.println(x); 10 myMethod(); 11 System.out.println(x + y++ +x); 12 } 13 public static void myMethod(){ 14 y = x++ + ++x; 15 System.out.println(x); 16 System.out.println(y); 17 //计算顺序:y = x+(++x);x+1 18 } 19 }
输出结果为:
5
-1
1
0
2
分析:a++先执行整个语句,再将a值加1,而++b先将b的值加1,再执行整个语句。
可以将y = x++ + ++x;中x++看成一条语句,++x看成另一条语句,如下程序所示:
2)
1 public class Test { 2 static { 3 int x = 5; //x是局部变量,不影响后边的值。 4 System.out.println(x); 5 } 6 static int x,y; //x和y是全局变量,初始化后x=0,y=0。 7 public static void main(String[] args) { 8 x--; 9 System.out.println(x); 10 myMethod(); 11 System.out.println(x + y++ +x); 12 } 13 public static void myMethod(){ 14 int a,b; 15 a = x++; 16 b = ++x; 17 System.out.println("a = " + a); 18 System.out.println("b = " + b); 19 y = a + b; 20 System.out.println(x); 21 System.out.println(y); 22 //计算顺序:y = x+(++x);x+1 23 } 24 }
输出结果为:
5
-1
a = -1
b = 1
1
0
2
另外,调换上天a和b的先后顺序,输出结果是不一样的:
1 public class Test { 2 static { 3 int x = 5; //x是局部变量,不影响后边的值。 4 System.out.println(x); 5 } 6 static int x,y; //x和y是全局变量,初始化后x=0,y=0。 7 public static void main(String[] args) { 8 x--; 9 System.out.println(x); 10 myMethod(); 11 System.out.println(x + y++ +x); 12 } 13 public static void myMethod(){ 14 int a,b; 15 b = ++x; 16 a = x++; 17 System.out.println("a = " + a); 18 System.out.println("b = " + b); 19 y = x++ + ++x; 20 System.out.println(x); 21 System.out.println(y); 22 //计算顺序:y = x+(++x);x+1 23 } 24 }
输出结果为:
5
-1
a = 0
b = 0
3
4
10