public class Test{
static{
int x=5;
}
static int x,y;
public static void main(String args[]){
x--;
myMethod( );
System.out.println(x+y+ ++x);
}
public static void myMethod( ){
y=x++ + ++x;
}
}
首先静态代码块是干扰项, 静态变量默认赋值为0,x=0,y =0, x-- ; x =-1,y=0; 然后就要执行方法体了, y =x++ + ++x;
理解为y =(x++) +(++x) x++表示参与完运算之后再++ 即 y =-1+ ++x 此时x =0 ++x表示先自增再参与运算。++x =1, x=1
y =-1+1 =0 ; 然后执行x+y+ ++x =1+0+2 =3;
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
最终打印的是0 i =i++相当于 temp = i i =i=1 i=temp 自增被覆盖掉了
如果改为int j =i++; j 为0,i为1;
int i = 0;
i++;
System.out.println(i); //值为1 打印的是表达式的结果
int i = 0;
++i;
System.out.println(i); //值为1 打印的是表达式的结果
int i = 0;
i = i++;
System.out.println(i); //值为0 打印的是中间变量(JVM中间缓存变量机制)
int i = 0;
i = ++i;
System.out.println(i); //值为1 打印的是表达式的结果