public class UnaryOp {
static int i=1;
static{
i= i-- + --i;
System.out.println(i); // Result comes 0
}
{
i=i++ - ++i;
System.out.println("i valus is" +i); //Result comes -2
}
int methodOfTest(){
return i+i - i*i/i;
}
public static void main(String[] args){
System.out.println("new UnaryOp().methodOfTest()); //How the result comes as i=-2 when executed instead i=1?
}
}
执行流程是:
当发生内存分配时,执行初始化块,i值为-2。但是根据我的说法,当执行methodfOfTest()时,i值应为1.但它显示的是-2,它是初始化块的i值。
谁能解释我怎么样?
答案 0 :(得分:1)
首先,此代码中存在错误
System.out.println(“new UnaryOp()。methodOfTest()); //当执行i = -2时,结果如何变为i = 1?
因为你添加了不必要的引用
是执行流程正确。
静态块
初始化块
methodfOfTest()。
当methodOfTest()执行时,i的值为-2
然后运算符优先级为:
*
/
+
-
所以结果将被evaluta为(-2 * -2)= 4,现在4 / -2 = -2
现在-2 + -2 = -4 表达式变为
-4-(-2)=-2
此表达式根据运算符优先级进行评估。