黑马程序员技术交流社区

标题: 关于int a=2;int b=(a++)+3*a [打印本页]

作者: 王亚运    时间: 2012-10-30 14:40
标题: 关于int a=2;int b=(a++)+3*a
本帖最后由 王亚运 于 2012-10-30 15:29 编辑
  1. int a=2;
  2. int b=(a++)+3*a;</font>
复制代码
关于这代代码。
书上说结果b=11
不信,运行结果果然是11....-_-!!
为什么不是先运行括号?
括号优先级貌似比*要高的啊.


{:soso__4051996887250320904_4:}


好吧,一直是认为,
先运行括号(a++)=3
然后是 ,3+3*3..
看来我错了...
下沉吧...

作者: 种生祥    时间: 2012-10-30 14:48
就是括号先运行啊
是++a和a++的问题
作者: 王永荣    时间: 2012-10-30 14:51
没错啊
先运行的就是a++啊,
b=(a++)+3*a;
b=2+3*3 这不就是11吗?
作者: 李靖    时间: 2012-10-30 15:13
int a=2;
int b=a++ + 3*a;
System.out.println(b);
add(a++);
public static void add(int a){
                System.out.println(a);
        }
a++的作用是,下一次用到时加1,像add(a++),因为a的作用范围是局部变量,而这是值传递,a++没有做到下一次的应用,所以在新的方法add,a++并没有穿++是无效的
作者: 徐强    时间: 2012-10-30 15:17
b=(a++)+3*a
先计算(a++)的值,因为a=2,所以,(a++)的值是2,然后a自加一次,a的值就是3,3*a值是9,表达式就是b=2+9;所有值最后是11.
作者: 坚持不懈    时间: 2012-10-30 15:22
int b=(a++)+ 3*a;
可以这么理解  a++  a先出玩  a还是2  ,       +3*a(a玩完后回来之后加1)也就是3
作者: 王亚运    时间: 2012-10-30 15:26
种生祥 发表于 2012-10-30 14:48
就是括号先运行啊
是++a和a++的问题

好吧,一直是认为,
先运行括号(a++)=3
然后是 ,3+3*3..
看来我错了...:dizzy:
作者: 王亚运    时间: 2012-10-30 15:27
王永荣 发表于 2012-10-30 14:51
没错啊
先运行的就是a++啊,
b=(a++)+3*a;

一直是认为,
先运行括号(a++)=3
然后是 ,3+3*3..
看来我错了...
作者: 坚持不懈    时间: 2012-10-30 15:36
本帖最后由 坚持不懈 于 2012-10-30 16:46 编辑
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {        
  5.                 int a=2;
  6.                 int b=a++;
  7.                 System.out.println("b="+b);
  8.                 System.out.println("a="+a);
  9.         }

  10. }
  11.                 结果输出b=2,a=3;
  12. //总结:a++  a是先出去玩   把2的值给b      之后a回来在自加1 变成3
  13.          
  14. */
  15. class Demo
  16. {
  17.         public static void main(String[] args)
  18.         {        
  19.                 int a=2;
  20.                 int b=++a;
  21.                 System.out.println("b="+b);
  22.                 System.out.println("a="+a);
  23.         }
  24. }                         结果输出b=3,a=3;
  25. //总结: ++a  a是先自加1   把3的值给b     最后a也就是3啦
复制代码
帮助人是件很高兴的事,嘿嘿.  还可以帮助自己巩固知识~~
作者: 张胜格    时间: 2012-10-30 16:24
是先运行括号的没错,运行后:a=3,但是在程序内部被加数2已经在执行括号中的内容是就保存好了。所以是2+3*a而不是3+3*a

作者: 坚持不懈    时间: 2012-10-30 16:46
坚持不懈 发表于 2012-10-30 15:36
帮助人是件很高兴的事,嘿嘿.  还可以帮助自己巩固知识~~

嘿嘿,不好意思啊,总结那写对了. 结果输出那快写差了. 嘿嘿,在次不好意思




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