JAVA片段:输出说明

时间:2015-10-07 08:30:05

标签: java

我正在浏览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。

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