个人理解,希望能帮到你
首先,
public static void myMethod(){
y=x+++++x;
}在这个方法中,你的代码有问题,我改成的是y=(x++)+(++x);
1、这个程序中存在一个静态代码块
static{
int x=6;
}
一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化,但是这里面的x对后面中的调用的x没有影响,因为第二点
2、在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),所在在主函数main()方法和myMethod()这个两个静态的方法中的x,y的值调用的是在类中定义的静态变量x,y,因为想x,y没有进行赋值操作,所以调用的是它们的默认值0
3、在主函数中
public static void main(String args[]){
x--; //执行代码后,此时x的值为-1,即此时在内存中x的值为-1,y的值是0
myMethod();
System.out.println(x+y+++x);
}
执行myMethod()时
public static void myMethod(){
y=(x++)+(++x); //x++的值为-1,先赋值后运算,x的值为0; ++x先运算后赋值,x的值为1,++x的值为1,所以y=-1+1=0
}
执行结束后,在内存中x的值为1,y的值是0
所以最后输出x+y+++x中,等价于x+(y++)+x,所以先进行的是y++操作,先赋值后运算,y++的结果为0,所以最后的输出结果是2
最后在内存中x的值为1,y的值也是1
|