黑马程序员技术交流社区

标题: java基础问题 [打印本页]

作者: 不抛弃不放弃    时间: 2013-11-6 20:09
标题: java基础问题
int x=5    执行   x+=x++  + (x++)后x是多少?  为什么  请说明执行的详细步骤 谢谢 大家 顺便问一下  加不加括号一样吗
作者: ~﹏~    时间: 2013-11-6 20:22
  1.         public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 int x=5;
  4.                 x+=x+++(x++);
  5.                 //x=5+x+++5
  6.                 //x=5+6+5
  7.                 //x=11
  8.                 System.out.println(x);
  9.         }
复制代码

作者: ~﹏~    时间: 2013-11-6 20:23
不好意思是16啊
作者: 不抛弃不放弃    时间: 2013-11-6 22:45
~﹏~ 发表于 2013-11-6 20:22

怎么x是6呢 有点不明白  x++应该先用x运算 然后x才加1  怎么是加1后 才运算啊
作者: Sasson    时间: 2013-11-6 23:30
        public static void main (String []args){
                int x = 5;
                x+=x++  + (x++); //x = x + x++ + (x++);
                                //把这个式子精简 x = x + x++ +x ; x++优先级比较低简化为x
                                //这个时候虚拟机是这样判断的 x = x + x+(+ +x) ;
                System.out.println(x);
        }
----------------------------------------------------------------------------------------------------------
不知道分析的对不对   求指点
作者: ~﹏~    时间: 2013-11-7 13:20
~﹏~ 发表于 2013-11-6 20:22

我算的是16呢
作者: 不抛弃不放弃    时间: 2013-11-7 18:05
Sasson 发表于 2013-11-6 23:30
public static void main (String []args){
                int x = 5;
                x+=x++  + (x++); //x = x + x++ + (x++);

分析 好像不太对吧  我已经知道了
作者: Sasson    时间: 2013-11-7 20:42
那为什么是16呢
作者: 451505680    时间: 2013-11-7 23:53
其实就是计算先后顺序的事,可以把他看作成x=x+(x+++(x++));这样就好算了 分解成先把x+++(x++)看作一个整体用y表示就是x=5+y;y=x+++(x++),先计算x++,自加后x编程了6于是y=(6++)+5,所以
x=5+6+5=16

作者: 451505680    时间: 2013-11-8 00:22
刚才写错了 应该是好像是 计算先后顺序的事,可以把他看作成x=x+(x+++(x++));这样就好算了 分解成先把x+++(x++)看作一个整体用y表示就是x=5+y;y=x+++(x++),先计算x++,自加后x编程了6于是y=5+(6++)=11 然后是x=x+y=5+11




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2