A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李燕 中级黑马   /  2013-4-5 23:55  /  1807 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo{
        public static void main (String []args)
{
       int   a=3;
   System.out.println(a++*++a);//打印结果是15,
   System.out.println(a++ + ++a);这个也一样,打印是8
    }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

10 个回复

倒序浏览
{:soso_e199:}遇到a++是先用a的值之后a的值自动+1,++a是先把a值+1再来用这个值。
因此,a++ + ++a这样的运算相当于是3+5  第一个a是原值3,之后a就是4,遇到第二个a要再+1运算,于是就是5。。。。。。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
a++ 先使用,再自增。  ++a 先自增,再使用。
(a++ * ++a)  --->3 (a++后a=4) * 5(++a 先自增后为a=5)  即3*5
(a++ + ++a)---->((a++) + (++a)) 雷同

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨成 于 2013-4-6 00:24 编辑

这个是运算符优先级问题:
运算符按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? :=
所以:
a++ * ++a   ,等于3的a 乘以 a++和++a以后的a(这时a=5),就等于3*5=15。(注意此时a=5)。
a++ + ++a   ,等于5的a 加上 a++和++a以后的a(这时a=7),就等于5+7=12。

代码,顺便纠正你里面的错误!
  1. class Demo
  2. {
  3.         public static void main (String []args)
  4.         {
  5.                 int   a=3;
  6.                 System.out.println(a++*++a);//打印结果是15

  7.                 System.out.println(a);//为了验证a的值

  8.                 System.out.println(a++ + ++a);//这个你写错了,是12,不是8
  9.      }

  10. }
复制代码
有图有真相:

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
看来你没搞懂a++和++a的区别,他们的区别是:a++是a先参与运算,再自增一次;++a是先自增然后再参与运算,下面分析下你的代码:
a++*++a,先看*左边,a++的a先参与运算就变成3*++a,再看*右边,++a先自增再运算,但是此时因为a已经自增了一次,变为4了,再自增一次就成5了,所以就是3*5,结果是15.记住每次a自增完就会成为自增后的数。
第二个同理,就是搞清楚a的变化就知道了,刚开始学是有点不好理解,慢慢的就会了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
第二个结果是12,不是8.  详情请看我的底下的回复!
回复 使用道具 举报
这个就像毕老师说的那样,a++是先吃饭在出去玩 ++a是先出去玩在吃饭
回复 使用道具 举报
a++和++a是先后自增问题。
你第一个a++是a参与运算在自增,后面的是自增在运算,
(a++*++a)-->3(先自增后运算)*5(因为前面自增一次a=4,然后又自增一次,a=5),你运算的结果当然是15了。
第二个道理和他差不多,不过你运算的结果有问题,应该不是8,而是12。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
杨成 发表于 2013-4-6 00:21
这个是运算符优先级问题:
运算符按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - > > ...

哈,不好意思,我写错了,是system.out.println(++a + a++),你的结果是对的,多谢,现在已经明白啦
回复 使用道具 举报
先使用a 一看a 是3  然后继续向后走  碰到了*    a使用过了  所以自增变为4  在*后碰到了 ++a  这个不用说了 4先+1在使用 就是 3*5


这个先使用后自增 不是说 要等运算式运算玩在自增

你可以这样理解,  a++就是
创建一个临时容器 记住 3  然后 a增为4   然后用3去运算  
如果后面还有用到a的地方如 a++ *++ a

创建一个临时容器 记住 3  然后 a增为4   用3去连接*号  然后后面的a不用说了 a已经是4 先+1在和3运算 结果是15

额 语言很乱.

我也不知道怎么说好,希望楼主能够看明白我要表达的.

语言组织能力不好.
回复 使用道具 举报
a=3
a++=3
但是此时a已经是4了++a就等于5了
3*5=15 3=5=8
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马