JAVA代码片段:输出解释
我正在浏览java代码片段,这一段我不明白为什么输出是2JAVA代码片段:输出解释,java,Java,我正在浏览java代码片段,这一段我不明白为什么输出是2 package com.instanceofjava; public class A{ static int a = 1111; static { a = a-- - --a; } { a = a++ + ++a; } public static void main(Str
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吗 由于不创建类的实例,因此只执行静态初始值设定项块(不执行实例初始值设定项块中的表达式
a=a+++++++a;
)
第一个a
被初始化为1111(由于static int a=1111;
)
然后执行静态初始值设定项块,并执行以下赋值:
a = a-- - --a;
a--
递减a
并返回先前的值1111。
--a
递减先前递减的值(1110)并返回新值1109
因此,表达式的计算结果为:
a = 1111 - 1109 = 2
这里要注意的关键点是,这里只执行静态块,而从未执行初始化块 因此,代码
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
'a--递减a并返回以前的值1111'。如果a--递减a,那么它为什么会再次返回1111?因此a--将值设为1110,--a设为1109,但既然a--存在,那么将在下次使用递减的值,而a--将仅为1111?@ArthurEirich后缀递减运算符a-->/code>递减a
的值,但返回a
的上一个值。这就是这个运算符的定义。@Akki619是的,a--
将返回a
-1111-的原始值,即使它将其减至1110.@SSH第二个块中是否缺少static关键字或是故意忽略了它是另一个问题。没有static关键字,它是一个实例初始值设定项块,只有在创建类的实例时才会执行。由于从未创建过的实例,因此不会执行它。