2015-10-07 82 views
2

我正在浏览java代码片段,而这个片段我无法弄清楚为什么输出是2?JAVA代码片段:输出解释

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。

回答

6

由于您未创建类的实例,因此只执行静态初始化程序块(实例初始化程序块中的表达式a = a++ + ++a;未执行)。

第一个a初始化为1111(由于static int a = 1111;)。

然后静态初始化块被执行并且分配如下发生:

a = a-- - --a; 

a--递减a并返回原先的值1111 --a递减先前递减的值(1110),并返回新值1109.

因此该表达式评估为:

a = 1111 - 1109 = 2 
+0

“A--递减和返回前值1111。如果a--递减了为什么然后又返回1111? –

+0

所以a--使值为1110,-a使它成为1109,但由于a--下一次将使用递减的值,而a--将仅为1111? – Akki619

+1

@ArthurEirich后缀递减运算符'a - '递减'a'的值,但返回前一个'a'的值。这是这个操作符的定义。 – Eran

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