首页 > 代码库 > a+=b 等价于 a=a+b ?
a+=b 等价于 a=a+b ?
a += b和a = a + b全然等价么(java)?可能非常多人以为是一样的,事实上并不是等价的,以下看一下证据吧。
public class Test {
public static void main(String[] args) {
int a = 0;
float c = 2.0f;
a += c;
a = a + c; //①
}
}
上面的代码有问题么? 可以通过编译么? 答案是否定的。
$ 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的反编译后的代码:
public class Test
{
public static void main(String[] paramArrayOfString)
{
int i = 0;
float f = 2.0F;
i = (int)(i + f);
}
}
看一下下面这句:
i = (int)(i + f);
能够看出a += c在编译的时候做了强制类型转换。
结论: 对于 a += c 假设a的类型能够兼容b。则 (a += c) == (a = a + c) 否则,则会在a与c做完加法后进行强制转换。
很多其它文章请訪问小胖轩.
a+=b 等价于 a=a+b ?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。