注册 登录
编程论坛 JAVA论坛

运算符优先级问题

有多难 发布于 2018-04-15 13:47, 1996 次点击
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;

 }

}

求输出结果和过程分析。
4 回复
#2
有多难2018-04-15 21:39
想了半天了,自己强行解释一波:
【在解释之前说明一下,把myMethod()方法中的算数表达式中的+号换成了-号后,方法结束后y的值为-2】
int型变量x、y没有手动赋初值,默认初始值都为0;
进入main方法,x--,所以x的值为-1;
调用myMethod方法x++先参与运算后自加1,所以此处参与运算的x值为-1,
然后x++,x值变成0,然后++x,先自加1后参与运算,所以后一个x值为1,所以最终的y值为0;
然后回到main方法,x值为1,y值为0,++x值为2,最后输出结果为3.


[此贴子已经被作者于2018-4-15 21:40编辑过]

#3
疯狂的小a2018-04-16 21:14
回复 2楼 有多难
你是不是还不会debug
#4
有多难2018-04-18 22:38
回复 3楼 疯狂的小a
会了 大佬 基础比较薄弱 正在不断进步中 。话说我自己上面的分析有毛病吗?
#5
a3510218172018-04-26 01:28
i++是先进算数表达式运算,再i自加1;
++i是i先自加1后的结果覆盖掉i原先的值,然后i再参与算数表达式运算。在实际开发中很少用那么奇怪表达式,一般面试题居多,什么i++ + i + ++i之类的脑残代码,不过也是为了考察你的基础是不是扎实;
此外,这个静态代码块写得没有实际意义,只是徒劳占用内存而已,你这个代码是面试题里面的吧,这个是个迷惑代码。
static{

    int x=5;

}
静态代码块在class文件编译后,就写入字节文件中了,一般会一直存在内存地址中的。
1