为什么我为静态和实例初始化程序块中分配的静态变量获取此输出?

时间:2015-08-18 18:31:04

标签: java operators

我在接受采访时获得了以下代码。

为什么输出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);
    }
}

2 个答案:

答案 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