知识点:

复合赋值操作符会悄悄地产生一个转型。

Java语言规范中讲到,复合赋值 E1 op= E2 等价于简单赋值E1 = (T)((E1)op(E2)),

其中 T 是E1 的类型,除非E1 只被计算一次。 

问题:

short x = 0;
int i = 123456;x += i;// 包含了一个隐藏的转型。语句合法,但是逻辑上有问题x = x + i; // 语法错误。无法通过编译,丢失精度

结果是不是出乎大家的意料呢?的确如此。
产生这个结果的原因:

Java语言规范中讲到,复合赋值 E1 op= E2 等价于简单赋值E1 = (T)((E1)op(E2)),

其中 T 是E1 的类型,除非E1 只被计算一次。 

解决方法:

总结:

总之,复合赋值操作符会悄悄地产生一个转型。如果计算结果的类型宽于变量的
类型,那么所产生的转型就是一个危险的窄化转型。这样的转型可能会悄悄地丢
弃掉精度或数量值。对语言设计者来说,也许让复合赋值操作符产生一个不可见
的转型本身就是一个错误;对于在复合赋值中的变量类型比计算结果窄的情况,
也许应该让其非法才对。
 

《Java解惑》系列——01表达式之谜——谜题09:半斤相关推荐

  1. Java解惑系列(三): 让人疑惑的0xff

    问题一:让人疑惑的0xff 在我们学习源码的时候,能经常见到类似于这种操作的场景:b & 0xff,因为我们平时不经常与十六进制,或者说不经常与逻辑运算符打交道,所以刚看到的时候,或许不太清楚 ...

  2. Java从零开始系列01:Java入门

    学习目标: 什么是Java Java特性 Java程序设计环境 Java的基本程序设计结构 1.什么是Java Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理 ...

  3. Java解惑 电子书

    --表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...

  4. java解惑你知道多少_Java解惑

    第1章 绪论 第2章 表达式之谜 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:DOS EQUIS 谜题9:半 ...

  5. Java 集合系列目录(Category)

    Java 集合系列目录(Category) 转自:Java 集合系列目录(Category) 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 0 ...

  6. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. 新手菜鸟 Java 集合系列目录(Category)

    Java 集合系列01之 总体框架 http://www.cnblogs.com/skywang12345/p/3308498.html (笔记:Java集合是java提供的工具包,包含了常用的数据结 ...

  8. Java多线程系列之“JUC集合“详解

    Java集合包 在"Java 集合系列01之 总体框架"中,介绍java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List( ...

  9. Java多线程系列--“JUC原子类”01之 框架

    2019独角兽企业重金招聘Python工程师标准>>> Java多线程系列--"JUC原子类"01之 框架 根据修改的数据类型,可以将JUC包中的原子操作类可以分 ...

  10. Java多线程系列---“JUC锁”01之 框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...

最新文章

  1. 关于表单的java的程序_JAVA BOT程序模拟人类用户填写表单 并 发送
  2. vector机器人 WAYS TO INTERACT WITH VECTOR 与 VECTOR 的交互方式
  3. 解决screen Cannot open your terminal '/dev/pts/1'问题
  4. SMARTFORM 循环打印实现 (循环调用SMARTFORM)
  5. 零基础入门NLP之搭建中文分词工具
  6. 云服务和硬件成微软业绩新增长点
  7. c语言有n个人围成一圈用指针,c语言编写n个人围成一圈,按1、2、3报数,报到3的人退出,求最后留在圈中的人是最初n个人中的第几个(用指针实现)...
  8. 《软技能—代码之外的生存指南》
  9. 【EMNLP 2020】篇章要素识别和篇章结构评分(上)
  10. 在Arcgis中利用Python编写脚本批量化处理数据实例
  11. Windows API一日一练(17)DialogBox和DialogBoxParam函数
  12. 光敏传感器实验报告_光敏电阻传感器实验报告
  13. cad多段线画圆弧方向_怎样在cad中利用多线画圆弧
  14. NHANES数据库的介绍及使用(二)
  15. asp dotnet core 从零开始创建一个 WebApi 服务
  16. type=“hiden”的用法
  17. google play电子市场和gmail如何安装在国产手机、三星手机、摩托手机里
  18. 数据挖掘——关联分析基础介绍(上)
  19. 通俗易懂解释IP段192.168.1.0/24和192.168.0.0/16
  20. 概率论基础-泊松分布计算近似概率

热门文章

  1. win10卸载office2016提示:安装程序包的语言不受系统支持
  2. 共享网络隐藏计算机,把电脑变成无线路由器,wifi共享大师隐藏ssid-
  3. 从零开始的MySQL数据库三部曲(二、MySQL数据库的创库创表增删改查篇)
  4. PHP strpos
  5. ret2shellcode 的泄露puts@got表
  6. 第三次小班讨论课——海明检验码、用晶体管而不是逻辑门实现异或门
  7. python打开xls_python读取XLS文件或CSV文件
  8. R语言windows函数自动生成可视化图像画布框、使用plot函数可视化数据点图、使用type参数指定数据点为实线
  9. 什么是云服务和云服务端开发?
  10. dependency