先问一个问题
x+=i和x=x+i两个表达式是一样的吗?
很多人都认为二者是一样的,没有什么不同,只是一个是另一个的简写形式罢了,
但是这并是十分准确的,这两个表达式都是赋值表达式,一个简单的”=“赋值表达式,
另一个是复合赋值表达式。
在java中有一种隐式的类型转换,在复合赋值表达式中,自动的将其所执行的计算的结果,转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响,但是,如果结果的类型比该变量的类型要宽,那么复合赋值操作将隐式的执行窄化操作的类型转换,所以上述两个表达式可能会造成编译错误。
例如:
short x=0; int i=123456;
x+=x+i;//不会产生任何的编译错误,但是包含了一个隐式的类型转换。
您可能会说执行的结果是123456,但是并非如此,它的值是-7616,int的类型对于short太大了,要进行窄化操作,截取后四位,所以结果并不是你所想。
相对应的,简单复制是非法的,因为它视图将int数值赋值给short变量,他需要一个显示的类型转换
x=x+i//会造成编译错误
所以,复合赋值表达式是很危险的,为了避免这种错误,不要讲复合赋值操作符用于byte,short,char类型的变量上,在用于int时,要保证右侧表达式不是long,float,double,复合赋值用于float时,保证右侧不是double,防止编译器窄化。

具体关于窄化与放大隐式转化的问题可以查看java编程思想一书,非常详细!

深入理解x+=i和x=x+i相关推荐

  1. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  2. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  3. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  4. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  5. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  6. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  7. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

  8. 文件句柄和文件描述符的区别和理解指针

    句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...

  9. 通俗理解条件熵-数学

    就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...

  10. 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积

    20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...

最新文章

  1. 数据结构与算法(2-1)线性表之顺序存储(顺序表)
  2. 控件View动态设置高度时会卡顿、速度慢的情况解决
  3. [CommunityServer]看RBAC的一方景象
  4. WordPress微信小程序社区论坛源码
  5. [CS] 发起Conference Call
  6. systen v消息队列(一)
  7. 学生信息管理系统(一)——登录窗体
  8. 教育行业课程介绍话术
  9. 微信小程序云开发日记类日记记录分享动态
  10. python xlrd读取文件报错_python利用xlrd读取excel文件始终报错原因
  11. python爬取歌曲教程_歌曲网站,教你爬取 mp3 和 lyric
  12. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  13. 雷爵代理游戏风云Unity休闲养成页游《宠物派对》
  14. 麦克斯韦方程组的组成由来、媒介的电磁性质和边界条件
  15. 甲骨文和IBM的IaaS云战略:畅所欲言,少投资
  16. python小黄猫--经纬度转换为坐标系x,y
  17. 如何辨别高防服务器?甜甜给您解答
  18. ddr老化测试_一种通过SOC测试DDR内存稳定性的方法与流程
  19. 分成两半的子爵读后感
  20. 大地 Ghost Win7Sp1x86 装机版Y9.8

热门文章

  1. 乐视网预计前三季经营性持续亏损超14亿 贾跃亭无力还债
  2. could not fetch initial value for increment genera
  3. 罗兰贝格 | 2017全球智慧城市战略指数发布
  4. 苹果Apple Music支持无损音频和杜比全景声空间音频
  5. 百度编辑器ueditor工具栏
  6. 数据库设计时的一些注意事项
  7. HustOJ - 1026
  8. Win10 Outlook和Foxmail中如何添加QQ邮箱账户
  9. Java基于springboot开发的疫苗预约小程序
  10. JAVA代码给QQ邮箱发邮件