看我的代码,它到底是怎么算的?看我的注释算的是4,为什么最后是7?

看我的代码,它到底是怎么算的?看我的注释算的是4,为什么最后是7?

package com.Imooc;


public class Exranple {


public static void main(String[] args) {

int a=2;

a=(a++)+a+(--a);

//先算(--a)=a-1=2-1=1,此时a=1

//再算a=(a++)+a+1=1+1+1=3,此时a=3

//最后算(a++)=a+1=3+1=4,此时a=4

System.out.println(a);

}


}


正在回答

登陆购买课程后可参与讨论,去登陆

5回答

Java中,同一条语句是从左往右执行的吧,根据运算符优先级应该

//先算(a++)=a+1=2+1=3;(--a)=a-1=2-1=1,此时a=3

//再算a=3+3+1,结果a=7

http://img1.sycdn.imooc.com//climg/5aed74d00001fc6f01560088.jpg

  • ming_Hao 提问者 #1
    不是应该先算(--a)的吗?a先自减1再参与运算呀。
    2018-05-05 17:32:36
  • Skye丶 回复 提问者 ming_Hao #2
    错了错了,应该是a=(a++)+a+(--a),a++是先算再加,就是2+3+(3-1)=7,运算顺序是从左往右的
    2018-05-05 17:42:24
  • ming_Hao 提问者 回复 Skye丶 #3
    那么(a++)先运算后自加,这里的自加后的a是多少?用到哪了?
    2018-05-05 22:10:14
慕侠5419749 2018-05-10 11:22:55

应该是2+3+2,不是3+3+1,楼上的解释才是对的

好帮手慕雪 2018-05-10 11:04:51

a=(a++)+a+(--a);   //2+3+2

a=(a++)+a+(a--);//2+3+3

a=(a++)+a+(a);  //2+3+3

a=(--a)+a+(a);  //1+1+1

a=(a--)+a+(a);  //2+1+1

祝:学习愉快





  • 提问者 ming_Hao #1
    谢谢老师!
    2018-05-10 13:46:45
慕盖茨9548946 2018-05-10 09:45:41

不对吧,这个应该是2+3+2得出的7,先算等号右边的,最后一步是把右边的结果赋值给左边的a

//(a++)这一项在这式子里就是当作2算的,自增运算在这之后,所以第二个a的值在这式子里当作3算,(--a)这一项先进行自减运算,所以当作2算。所以全部加起来就是2+3+2=7,最后一步是赋值给左边的a。

//可以用另几个个例子来验证这一说法。

比如:

int a=2;

a=(a++)+2*a;

//这个结果应该是2+2*3=8

int a=2;

a=(a++)*2+a;

//这个结果应该是2*2+3=7;

int a=2;

a=(--a)+a*2;

//这个结果应该是1+1*2=3

int a=2;

a=(--a)*2+a;

//这个结果应该是1*2+1=3

  • 提问者 ming_Hao #1
    非常详细,谢谢!
    2018-05-10 13:49:17
Skye丶 2018-05-05 17:12:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师