若有 a=3, a+=a*=a; 为什么结果等于12,不等于18?

若有 a=3, a+=a*=a; 为什么结果等于12,不等于18?

正在回答 回答被采纳积分+1

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

65回答
霸气呼啦啦哇咔咔 2018-08-07 19:21:03

因为赋值运算从右往左,+=之后是a*=a, 先算这个,这个值是9,然后a+=9=12

慕粉221501223 2018-08-06 22:57:43

把它看成是a=3+3*3

慕羲 2018-08-05 17:27:42

赋值运算,从右到左计算,a=3,a=a*3,a=a+9;

慕粉221501223 2018-08-05 12:08:49

先乘后加,这个表达式也就是3+3*3=12

柯巴 2018-07-31 22:56:50

赋值运算符最后算,所以相当于从右往左算

Lucas_ke 2018-07-29 17:35:24

该运算符自右向左进行运算,也就是3*3+3=12

Glenn0931 2018-07-26 19:48:42

先是  a*=a,就是a=a*a得a=9=3*3

然后  a+=a,就是a=a+a得a=12=9+3


你说的等于18,是你以为,执行了a*=a后,a值为9了,然后9+9=18,其实不是,a值的最后结果,应该是以这块代码运行结束了确定的,除非是++a这种东西。

希望能帮到你

张奉天 2018-07-24 14:39:57

计算顺序是:

a*=a; 得出 a*=9,a=3

a+=a; 相当于 a = a+9;


江_流 2018-07-16 13:11:35

编译顺序是从左往右,计算顺序从右往左,所以实际计算过程中,第一个a的值在最开始就被带进去了,具体为:

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

a = 3 + (a = a * a);

a = 3 + (a = 3 * a);

a = 3 + (a = 3 * 3);

a = 3 + (a = 9);

a = 3 + 9;

a = 12;

  • 您好,我想请问一下(int a=3;a+=a*=a)具体在内存中是怎么一个过程比如说 int a =3,就是说在栈中创建一个变量a,然后把在常量区的3的地址给 a,所以一开始像你说的第一个a就已经确定,然后下面的a+=a*=a要如何在内存中分析呢,求大神解答一波?
    2019-02-05 16:41:39
幕布斯2212419 2018-07-13 21:47:16
先看a*=a 
a=a*a
结果为9
a+=9
a=a+9
结果为12


小黄花鱼 2018-07-13 19:00:33

因为赋值运算是从右往左进行的 , 顺序为先 把a*a结果赋值给一个临时的空间,再用这个空间的数进行计算,就是a+这个数,再赋值给左边的a,就是12了。

谨守初心 2018-07-13 00:31:59

运算是有加减乘除优先级的,a+=a*=a,可看做:a=a+(a=a*a),先运算的乘除,然后才是加减。这个结果就是a=3+9=12.

__LiYun__ 2018-07-10 16:50:37

从右往左    a=3*3        a=3+a=3+3*3=12

立志学好Java 2018-07-09 22:22:59

拆分为a=a+(a*=a)→a=a+(a*a)→a=3+3*3=12

rockygly4353466 2018-07-05 20:54:05

a+=a*=a

简化成:a = 3;a+= a*a;即a += 9;在计算a = a+9;则最后结果等于12;

Joanna乔 2018-07-03 17:21:37

其实可以简化成a+=a*a------>a=a+a*a=12

believestudy 2018-07-01 11:51:32

这里我们先来看看等于18的情况是怎样的?

public class quest {

public static void main(String[] args) {

int a=3;

a*=a;

//a=a*a=3*3=9

System.out.println(a);

a+=9;

//a=a+9=9+9=18

System.out.println(a);

   }

最终a输出的结果18,因为在a*=a;的时候a的值是3,而到了a+=9;的时候d的值已经变为了9了,所以在这种分2部的计算中因为a的值发生了变化,所以结果是18.

而在

a=3, a+=a*=a; 中变量a的值始终是3,没有发生改变,所以最终放入运算结果是12.

 a=3;

a+=a*=a; 

System.out.println(a);

最终a的输出的结果是12

  • 对不起,这里我有个错误!, 不是:而到了a+=9;的时候d的值已经变为了9了, 正确的是:而到了a+=9;的时候a的值已经变为了9了,
    2018-07-11 08:12:49
  • 这个跟底层实现有关,他不会去读取你计算之后的值(a=9)来参与计算,依旧用之前读取到的a=3参与运算
    2018-07-14 07:01:52
慕数据3565510 2018-06-27 15:10:52

分部算,a+=a*=a,

假设b=(a*=a),那么b=(a=a*a),b=a*a

所以题目就变成a+=b,也就是,a=a+b,然后就是,a=a+a*a;

可以理解成先,和*、/、+、-一样的,先算*=或者/=,在算+=和-=

左手阳光右手沙 2018-06-23 10:21:49
水月心影镜中花 2018-06-22 17:56:10

a=3,a+=a*=a这个等式写成数学等式也就是a=a+a*a,所以结果就是12了,乘除的运算等级高于加减在JAVA中也是同样的

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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