我正在浏览java代码片段,这个片段我无法弄清楚为什么输出是2?
package com.instanceofjava;
public class A{
static int a = 1111;
static
{
a = a-- - --a;
}
{
a = a++ + ++a;
}
public static void main(String[] args) {
System.out.println(a);
}
}
有人可以解释为什么此代码段的输出为2。
答案 0 :(得分:6)
由于您没有创建类的实例,因此只执行静态初始化程序块(不执行实例初始化程序块中的表达式a = a++ + ++a;
)。
首先a
初始化为1111(由于static int a = 1111;
)。
然后执行静态初始化程序块并进行以下分配:
a = a-- - --a;
a--
递减a
并返回先前的值1111。
--a
递减先前递减的值(1110)并返回新值1109。
因此表达式被评估为:
a = 1111 - 1109 = 2
答案 1 :(得分:3)
这里要注意的关键点是静态块执行和初始化块从未在此处执行。
因此代码
static
{
}
执行并给出结果2.
只需检查一下,您可以删除整个启动块并运行
public class A{
static int a = 1111;
static
{
a = a-- - --a;
System.out.println(a);
}
public static void main(String[] args) {
System.out.println(a);
}
运行代码。给你同样的出局。
来到部分减少
a-- means: Decrement a AFTER evaluating the expression.
--a means: Decrement variable BEFORE evaluating the expression.
因此,行a = a-- - --a;
等于
a = 1111 - 1109