a+=b 等价于 a=a+b ?
2015-07-10 22:08
281 查看
a += b和a = a + b完全等价么(java)?可能很多人以为是一样的,其实并非等价的,下面看一下证据吧。
上面的代码有问题么? 能够通过编译么? 答案是否定的。
出现的问题是编译错误, 但是a += c却不会出现编译错误,能够正常通过编译。
为什么为这样呢?
我们将①处代码去除后,顺利编译,可以使用jd-gui等工具看一下a += c的反编译后的代码:
看一下以下这句:
可以看出a += c在编译的时候做了强制类型转换。
更多文章请访问小胖轩.
[code]public class Test { public static void main(String[] args) { int a = 0; float c = 2.0f; a += c; a = a + c; //① } }
上面的代码有问题么? 能够通过编译么? 答案是否定的。
[code]$ javac Test.java Test.java:6: error: possible loss of precision a = a + c; ^ required: int found: float 1 error
出现的问题是编译错误, 但是a += c却不会出现编译错误,能够正常通过编译。
为什么为这样呢?
我们将①处代码去除后,顺利编译,可以使用jd-gui等工具看一下a += c的反编译后的代码:
[code]public class Test { public static void main(String[] paramArrayOfString) { int i = 0; float f = 2.0F; i = (int)(i + f); } }
看一下以下这句:
[code] i = (int)(i + f);
可以看出a += c在编译的时候做了强制类型转换。
[code]结论: 对于 a += c 如果a的类型可以兼容b,则 (a += c) == (a = a + c) 否则,则会在a与c做完加法后进行强制转换。
更多文章请访问小胖轩.
相关文章推荐
- 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)
- Android_在线视频播放器
- IIS6 应用程序池的配置
- java面试和笔试大全
- 笔记
- java初级笔记_多线程
- spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
- Docker系列(一)---镜像
- NFS文件服务器使用简介
- Best Time to Buy and Sell Stock III
- 黑马程序员_java 设计模式的概述
- jdbc知识问答
- Eclipse无法导入现有项目的解决方法
- jdbc知识问答 分类: 面试 2015-07-10 22:05 5人阅读 评论(0) 收藏
- vs中常用的快捷键
- 开篇
- 内存模型(memory models)和命名空间(namespace)
- java的引用和C++的指针有什么区别
- 学习笔记 02计算器界面
- 数据库优化-基准测试(三)