+=与-=运算符混合计算解析:

int x = 3;
x += x -= x -= x += x -= x;
详解:算数运算按运算符优先级运算,从右至左计算。

1. x=x-x; 实际为 3 - 3 计算结果为0;
2. x=x+x; 实际为 3 - 0,0是第1步结果,计算结果为3;
3. x=x-x; 实际为 3 - 3,3是第2步结果,计算结果为0;
4. x=x-x; 实际为 3 - 0,0是第3步结果,计算结果为3;
5. x=x+x; 实际为 3 + 3,3是第4步结果,计算结果为6。

表达简化后:x=x+(x-(x-(x+(x-x))));
总结:表达式里面运算符优先级相同,显示x初始值都为3,从右到左计算,最终x为6.

*,+,+=,-=运算符混合计算解析:

int y = 4;

y += y * (y += y) + y + y *
(y -= y + 1);

详解:算数运算符等级:

等级    符号    名词                 结合性

1         ()        圆括号              从左到右

3          *           乘                  从左到右

4         +           加                  从左到右

14      +=   混合赋值运算符    从右到左

14      -=    混合赋值运算符    从右到左

按运算符规则计算:

1.分析先计算+=的右边y * (y += y)
+ y + y * (y -= y + 1);

2.分析从左至右分解y * (y += y) + y + y * (y -= y + 1);

3.最先计算y * (y += y)。最终分析步骤如下:

1,2:y*(y=y+y);实际为4*(4+4),计算结果为32,y=8;

3:32+y;实际为32+8,计算结果为40,y=8;

4,5,6:y*(y-=y+1);实际为8*(8-(8+1)),计算结果为-8,y=-1;

7:40+(-8),计算结果为32.y=-1;

8:y=y+32 ,实际为4+32,计算结果为36,y=-1.

最终y结果为36.表达式简化后:y=y + y * (y = y+y) + y + y*(y = y
- (y+1));

总结:熟悉运算符优先等级,按步骤解析表达式一步一步计算。注意-=,+=计算后会修改掉变量的值。

备注:
作者:Shengming Zeng
博客:http://www.cnblogs.com/zengming/

本文是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。
<欢迎有不同想法或见解的同学一起探讨,共同进步>

Java 运算符-=,+=混合计算详解的更多相关文章

  1. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. JS逗号运算符的用法详解

    逗号运算符的用法详解 注意: 一.由于目前正在功读JavaScript技术,所以这里拿JavaScript为例.你可以自己在PHP中试试. 二.JavaScript语法比较复杂,因此拿JavaScri ...

  3. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  4. java ssl https 连接详解 生成证书 tomcat keystone

    java ssl https 连接详解 生成证书 我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over ...

  5. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  6. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  7. Java并发关键字Volatile 详解

    Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议 ...

  8. java和javascript日期详解

    ** java,js日期转换:** <Excerpt in index | 首页摘要> java的各种日期转换 <The rest of contents | 余下全文> 日期 ...

  9. java 8 stream reduce详解和误区

    目录 简介 reduce详解 总结 java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,比如count(), max(), min(), ...

随机推荐

  1. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165202

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165202 一.下载 虚拟机环境 Kali所需要虚拟机软件为VMware,在之前其他课程中使用的即为VMw ...

  2. IOS消息推送(转)

    第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发出推送消息的服务器,而APNS ...

  3. block ,GCD(转)

    原文:http://blog.sina.com.cn/s/blog_45e2b66c01010dhd.html 1.GCD之dispatch queue http://www.cnblogs.com/ ...

  4. cocos2d-x 2.1 -- 读取.plist文件

    在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在cocos2d-x解析.plist方面相关的资料比较少,但本身也很简单,要解析.plist文件可以参考coco ...

  5. bug生命周期和bug状态处理

    首先,测试人员发现 BUG ,做好记录并上报至 BUG 数据库.接着,开发组长或经理确定该 BUG 是否有效 之后指定 BUG 的优先级并安排给相关开发人员.否则拒绝该 BUG 的修复. 然后,该 B ...

  6. P1174 互素

    P1174 互素 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 对于某个数n,,我们这次的工作仅是求出小于n且和n互质的数的个数,,比如n=10时 1,3, ...

  7. c++跨文件变量声明

    常量是内部链接的,可以直接定义;  变量是外部链接,如果在头文件定义的话,如果出现多次引用同一个头文件的编译单元,就会引发multi redifine错误, 这个时候就要只是声明变量来解决:exter ...

  8. Audition CS6在Win 7中“音频输入的采样频率与输出设备不匹配”问题的解决 - imsoft.cnblogs

    1.运行Audion CS6,出现问题框. 2.右击任务栏右下方的那个小喇叭图标,在弹出的提示框里,单击“播放设备”.如图: 3.单击“播放设备”后,在图内左键单击“扬声器”然后双击“扬声器”,出现下 ...

  9. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...

  10. 相邻行列相互影响的状态类问题(类似状压dp的搜索)(POJ3279)

    POJ3279http://poj.org/problem?id=3279 题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小将原图变为全白的策略. 这是一道对于每个格 ...