前面的加减乘除四则运算,计算结果通过等号输出给指定变量,注意此时代码把变量放到等号左边。而在算术课本里,加法运算的完整写法类似于“1+1=2”这样,运算结果应该跟在等号右边。不过代数课本里的方程式存在“x=y+1”的写法,表示等号两边的结果数值是一样的,因此变量放在等号左边也是可以理解的。然而Java编程里的“=”并非数学上的相等涵义,而是一种赋值操作,所谓“赋值”,指的是将某一数值赋给某个变量的过程。计算机程序在运行的时候,不管操作什么类型的数据,都要有处地方保存运算前后的数值。变量在参与计算的时候,它可能存在多种身份,当变量作为运算过程的操作数之时,它保存的是运算前的数值;当变量作为运算结果的输出数之时,它保存的是运算后的数值。故而等号两边同时出现某个变量是完全正常的,就像下面代码演示的那样:

		// 日常生活中的加法例子是:1+1=2,运算结果在右边。但Java编程中是把运算结果放在左边的
int x = 1+1;
// 注意这里的等号是赋值操作,并非代数方程式里面的等号,否则x=x+7将会求得0=7的荒诞结果
x = x+7;

注意上述演示代码里的“x = x+7”,等号的左右两边虽然都出现了整型变量x,但是这两个x所处的时间点不同,使得它们代表的数值也不一样。等号右边的x,保存的是运算开始前的变量值,即2;而等号左边的x,保存的是运算结束后的数值,即9。所以前面的代码看似代数方程式,其实表示的是一个存在时间先后概念的赋值语句。

就赋值语句“x = x+7”而言,尽管它从数学角度来看很是无理,可是在计算机编程中却十分常见。该语句仅仅要求给某个整型变量加上若干数值,并未涉及到其它别的什么变量,好比某人的背包里原本装了三本书,然后往里面塞两本书,最终背包一共装了五本书。由于这种加法运算只对某个变量进行,因此Java又提供了“+=”运算符来简化变量的自增操作,新运算符的使用代码示例如下:

		// 对变量进行加法运算后,假如相加之和仍然保存在原变量,那么可按如下格式使用运算符“+=”
x += 7; // 该行代码等同于 x = x+7;
System.out.println("相加之和 x="+x);

既然有“+=”开了个自增运算的头,那么其它的四则运算依此类推,均可分别演变出自减运算符“-=”、自乘运算符“*=”、自除运算符“/=”,以及对变量自身取余数的运算符“%=”,相应的例子代码如下所示:

		// 运算符“-=”的作用类似“+=”,即把相减之差保存到原变量中
x -= 7; // 该行代码等同于 x = x-7;
System.out.println("相减之差 x="+x);
// 若要将相乘之积保存到原变量中,则可使用运算符“*=”
x *= 7; // 该行代码等同于 x = x*7;
System.out.println("相乘之积 x="+x);
// 若要将相除之商保存到原变量中,则可使用运算符“/=”
x /= 7; // 该行代码等同于 x = x/7;
System.out.println("相除之商 x="+x);
// 若要将相除之余保存到原变量中,则可使用运算符“%=”
x %= 7; // 该行代码等同于 x = x%7;
System.out.println("相除之余 x="+x);

推而广之,凡是对变量自身进行某种基础运算,然后运算结果又保存在该变量中,这些情况都适用于扩展了的赋值语句。譬如之前提到的按位左移操作符<<、按位右移操作符>>,均可演化出对应的自身左移运算符“<<=”,以及自身右移运算符“>>=”,这两个运算符的演示代码如下:

		// 若要将按位左移结果保存到原变量中,则可使用运算符“<<=”
x <<= 2; // 该行代码等同于 x = x << 2;
System.out.println("x按位左移两位="+x);
// 若要将按位右移结果保存到原变量中,则可使用运算符“>>=”
x >>= 2; // 该行代码等同于 x = x >> 2;
System.out.println("x按位右移两位="+x);

  

最新文章

  1. java性能调优及问题追踪--Btrace的使用
  2. Javascript快速入门(下篇)
  3. 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
  4. Git最佳实践
  5. js注册验证
  6. &lt;系统函数实现&gt;memcmp
  7. jquery ajax对特殊字符进行转义防止js注入使用示例
  8. Entity Framework With Mysql 之Code First
  9. C++格式化字符函数
  10. 记录:sea.js和require.js配置 与 性能对比
  11. C#可扩展编程之MEF
  12. unity3D学习序幕
  13. nginx+apache前后台搭配使用
  14. mariadb 压缩包gz安装方式
  15. 从一个点子到一个社区APP,是如何通过.NET实现的?——“文林物业系统”APP介绍及采访记录
  16. java0422 wen 集合框架
  17. GoodNotes如何删除文档的某一页
  18. 【Zend Studio】在Zend Studio中调试ThinkPhp框架
  19. ubuntu16.04下zabbix安装和配置
  20. mysql ON DUPLICATE KEY UPDATE ; 以及 同replace to 的区别.

热门文章

  1. MYSQL数据库数据拆分之分库分表总结
  2. Python 的字符串
  3. windows下golang实现Kfaka消息发送及kafka环境搭建
  4. TCP的三次握手与四次挥手(个人总结)
  5. 阿里云服务器公网Ip外网无法访问
  6. 论JVM爆炸的几种姿势及自救方法,你不得不知!
  7. Typescript 查缺补漏
  8. Linux suse 11 sp1 安装教程
  9. JVM系列第12讲:JVM参数之查看JVM参数
  10. Jquery.ajax dataType参数