《Java解惑》系列——01表达式之谜——谜题09:半斤
知识点:
复合赋值操作符会悄悄地产生一个转型。
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:半斤相关推荐
- Java解惑系列(三): 让人疑惑的0xff
问题一:让人疑惑的0xff 在我们学习源码的时候,能经常见到类似于这种操作的场景:b & 0xff,因为我们平时不经常与十六进制,或者说不经常与逻辑运算符打交道,所以刚看到的时候,或许不太清楚 ...
- Java从零开始系列01:Java入门
学习目标: 什么是Java Java特性 Java程序设计环境 Java的基本程序设计结构 1.什么是Java Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理 ...
- Java解惑 电子书
--表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...
- java解惑你知道多少_Java解惑
第1章 绪论 第2章 表达式之谜 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:DOS EQUIS 谜题9:半 ...
- Java 集合系列目录(Category)
Java 集合系列目录(Category) 转自:Java 集合系列目录(Category) 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 0 ...
- Java 集合系列 16 HashSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 新手菜鸟 Java 集合系列目录(Category)
Java 集合系列01之 总体框架 http://www.cnblogs.com/skywang12345/p/3308498.html (笔记:Java集合是java提供的工具包,包含了常用的数据结 ...
- Java多线程系列之“JUC集合“详解
Java集合包 在"Java 集合系列01之 总体框架"中,介绍java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List( ...
- Java多线程系列--“JUC原子类”01之 框架
2019独角兽企业重金招聘Python工程师标准>>> Java多线程系列--"JUC原子类"01之 框架 根据修改的数据类型,可以将JUC包中的原子操作类可以分 ...
- Java多线程系列---“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...
最新文章
- 关于表单的java的程序_JAVA BOT程序模拟人类用户填写表单 并 发送
- vector机器人 WAYS TO INTERACT WITH VECTOR 与 VECTOR 的交互方式
- 解决screen Cannot open your terminal '/dev/pts/1'问题
- SMARTFORM 循环打印实现 (循环调用SMARTFORM)
- 零基础入门NLP之搭建中文分词工具
- 云服务和硬件成微软业绩新增长点
- c语言有n个人围成一圈用指针,c语言编写n个人围成一圈,按1、2、3报数,报到3的人退出,求最后留在圈中的人是最初n个人中的第几个(用指针实现)...
- 《软技能—代码之外的生存指南》
- 【EMNLP 2020】篇章要素识别和篇章结构评分(上)
- 在Arcgis中利用Python编写脚本批量化处理数据实例
- Windows API一日一练(17)DialogBox和DialogBoxParam函数
- 光敏传感器实验报告_光敏电阻传感器实验报告
- cad多段线画圆弧方向_怎样在cad中利用多线画圆弧
- NHANES数据库的介绍及使用(二)
- asp dotnet core 从零开始创建一个 WebApi 服务
- type=“hiden”的用法
- google play电子市场和gmail如何安装在国产手机、三星手机、摩托手机里
- 数据挖掘——关联分析基础介绍(上)
- 通俗易懂解释IP段192.168.1.0/24和192.168.0.0/16
- 概率论基础-泊松分布计算近似概率
热门文章
- win10卸载office2016提示:安装程序包的语言不受系统支持
- 共享网络隐藏计算机,把电脑变成无线路由器,wifi共享大师隐藏ssid-
- 从零开始的MySQL数据库三部曲(二、MySQL数据库的创库创表增删改查篇)
- PHP strpos
- ret2shellcode 的泄露puts@got表
- 第三次小班讨论课——海明检验码、用晶体管而不是逻辑门实现异或门
- python打开xls_python读取XLS文件或CSV文件
- R语言windows函数自动生成可视化图像画布框、使用plot函数可视化数据点图、使用type参数指定数据点为实线
- 什么是云服务和云服务端开发?
- dependency