我在接受采访时获得了以下代码。
为什么输出2?
public class Test {
static int a = 1111;
static {
a = a-- - --a;
}
{
a = a++ + ++a;
}
public static void main(String[] args) {
System.out.println(a);
}
}
答案 0 :(得分:3)
static
变量a
初始化为1111
。
然后静态初始化程序运行。 a--
评估为1111
,但将a
设置为1110
。然后--a
运行,将a
设置为1109
并评估为1109
。发生减法,a
设置为减法结果2
。
实例初始值设定项(使用++
运算符)不会运行,因为没有Test
的实例。打印2
。
答案 1 :(得分:0)
要理解逻辑,请在静态块内添加以下代码并运行:
int b = a--;
System.out.println("Now b is " + b);
System.out.println("Now a is " + a);
int c = --a;
System.out.println("Now c is " + c);
System.out.println("Now a is " + a);
a = b-c; //1111 - 1109 = 2
System.out.println("a = " + a);
将打印:
b = 1111
a = 1110
c = 1109
a = 1109
a = 2