短文涨姿势,看了不白看,不关注等啥?

我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符。复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步是赋值。比如说:

上面的这两条语句相当于

但是,如果碰到下面这样的情况,a的值该应该是多少呢?

有人认为应该按以下方式来计算,因为我们都知道,在四则运算规则中,遵循“先乘除,后加减”的原则

按照这样的方式来计算,得到a的值应该是7,但实际运行程序所得到的结果是8。这是为什么呢?

就是因为复合赋值运算符在完成运算的时候,遵循一个规则:把“=”右边当作整体!也就是说,刚才的运算和赋值操作应该被解释为以下形式

因此,按照这种方式,“=”右边的“3+1”应该被当作整体,优先进行运算,所以得到的最终计算结果就是变量a的值为8。

我们再来看另外一个问题,这一次,我们把变量a的类型由原来的int改为short。

我们这么写代码没有任何问题,能够顺利通过编译。但是,如果我们没有使用复合赋值运算符,而是按如下所示的方式编写代码

在这种情况下,大家可以看到代码不能通过编译。我们把一个算术表达式的运算结果赋值给byte或者是short类型的变量,有时候会引起编译错误,所以按这种方式写代码会导致编译错误。关于引起这种错误的原因,大家可以看我的另一篇文章《Java语言中为byte和short类型变量赋值为啥会报错?看完秒懂》,该文对此现象有详细解释。我们现在重点讨论使用复合赋值运算符进行操作的时候,同样会有给short类型变量赋值的操作,为什么就不报错呢?原因就是:使用复合赋值运算符在对变量进行赋值的时候,编译器会“暗地里”加上一个强制类型转换的操作。也就是说,使用复合赋值运算符进行操作的时候,实际上等同于如下写法

这种强制类型转换,其实有可能让我们的程序在不经意间产生莫名其妙的错误,请看下面的例子

这一次,我们把a的初始值由原来的2改成了20000,并且在代码中还加入了输出a的语句,那么,输出结果会是多少呢?首先来讲,这段代码并没有报错,那么这个输出结果会让人很多人大吃一惊,它并不是我们想象的80000,而是竟然输出了14464!

之所以会输出这样的结果,就是因为80000已经超出了short类型数据的最大值,而我们强制把这个已经超过最大值的“80000”经过强制类型转换赋值给short变量,就会产生“溢出”,最终导致实际赋给变量a的是一个错误的值!最可恶的是,因为是强制类型转换之后进行的赋值,所以编译器并不报错,从而导致很多人掉到坑里还不知道!

通过这个篇文章,大家可以看到:一个简单的复合赋值运算符竟然也“暗藏杀机”,我们平时编程一定要小心哦!

看短文,涨姿势,如想系统学习Java编程,点击下方的“了解更多”即可,不让你进去,用QQ登录就可以啦!有问题也可以加入我的QQ群一起讨论!

int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧相关推荐

  1. 复合的赋值运算符例题_Java千问:关于Java语言复合赋值运算符的两个问题,快来瞧瞧!...

    我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符.复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步是赋值.比如说: 上面的这两条语句相当 ...

  2. c语言10种复合赋值运算符,C语言复合赋值运算符

    C语言复合赋值运算符 在C语言的赋值中有一种特殊的赋值运算符,就是复合赋值运算符.下面是关于C语言复合赋值运算符的'相关介绍! 复合赋值运算符就是在赋值符"="之前加上其它二目运算 ...

  3. java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...

    [填空题]One day, at the registrar's office of a college, I noticed how parents are behaving with their ...

  4. java语言程序设计答案_《java语言程序设计》练习题及答案

    <java语言程序设计>练习题及答案 JAVA 语言程序设计题及部分答案 一.单选题:(每题1分)下列各题A).B).C).D)四个选项中, 只有一个选项是正确的,请将正确选项的标记写在题 ...

  5. java任何表达式都可以当作语句_在Java语言中语句用分号终止,并不是所有的表达式都可以构成语句...

    在Java语言中,语句以分号":"作为结束标志.块语句由其他语句组成,其本身不需要用分号结尾.另外,内嵌有块语句并以块语句结尾的语句,也不需要用分号结尾. Java语句可分为空语句 ...

  6. java和c语言有关联吗_关于JAVA语言,和C语言有什么联系吗?

    展开全部 Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,62616964757a686964616fe59b9ee7ad9431333337626264学习好语法规 ...

  7. 用java实现八皇后问题_使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  8. 浙大java语言程序设计_浙江大学java语言程序设计实验答案全集.doc

    浙江大学java语言程序设计实验答案全集.doc 1JAVA答案全集实验汇总.实验2数据类型和变量的使用一.程序填空,在屏幕上显示一个短句"PROGRAMMINGINJAVAISFUN&qu ...

  9. java程序填空题输出汤姆猫_《Java语言程序设计(新)》地大模拟

    <Java语言程序设计(新)>地大模拟 2020-08-29 08:08:08 635 有学员问关于<Java语言程序设计(新)>地大模拟的题目的参考答案和解析,具体如下: & ...

最新文章

  1. 计组第一章(唐朔飞)——计算机系统概述章节总结
  2. 天津大学计算机学院院长及副院长,李晓红 教授
  3. 关于android.view.WindowLeaked异常的解决方案
  4. 重量级锁的加锁的基本流程
  5. LLVM完整参考安装
  6. C++判断是否为素数、求一个数的因数、质因数分解
  7. 计算文档中不同单词出现的次数
  8. 用户名 不在 sudoers 文件中。此事将被报告。
  9. TASKCTL用户权限如何设置
  10. 修改XMAPP中Apache的默认访问的主页
  11. C++模拟手机通信录管理系统
  12. 【2014】手机卡关于怎么剪 让我告诉你
  13. hioki电阻测试仪3540软件,微电阻计/电阻测试仪/HIOKI 3540/HIOKI 3560/日置3540/日置3560...
  14. IEEE access投稿详细步骤
  15. 校园网环境下的微信同步
  16. Oracle loap函数,oracle loap函数用法
  17. java前后端技术栈
  18. JVM总结之垃圾回收详解
  19. Unity3D 通用麻将胡牌算法
  20. 十二生肖在英文中的寓意

热门文章

  1. nodjes 支付宝接口 - 优惠卷
  2. Standard C Library - 思维火花 - 博客频道 - CSDN.NET
  3. 设计模式学习(五):行为型模式
  4. 黑客是互联网的高危职业,选择不慎,很可能如“他们”一样入门到入狱!
  5. 我们找了3家制造企业,问问他们是怎么破解供应链难题的
  6. C++ 程序员要像医生一样调试代码?
  7. 用一个中介对象来封装一系列的对象交互
  8. 5月份,我居然发了这么多文章?我果然无聊.
  9. 百度优化有感,原创内容只是个传说
  10. 性能优化篇(1):原来罪魁祸首的是http请求数