在Java中,为什么我可以将double添加到int,但不能将double分配给int?
在Java中,给定:在Java中,为什么我可以将double添加到int,但不能将double分配给int?,java,primitive-types,Java,Primitive Types,在Java中,给定: int x = 4; double y = 4.5123; 为什么允许编写以下代码: x += y; // in my head I think, "The new value of x is the old value plus y." 但我不能简单地这样分配: x = y; TIA寻求答案。因为语言规范如此规定。也许这是一个令人沮丧的答案——但这是唯一正确的答案。是的,这有点奇怪;“赋值运算符(+=,-=,*=,等等)”包括一个自
int x = 4;
double y = 4.5123;
为什么允许编写以下代码:
x += y; // in my head I think, "The new value of x is the old value plus y."
但我不能简单地这样分配:
x = y;
TIA寻求答案。因为语言规范如此规定。也许这是一个令人沮丧的答案——但这是唯一正确的答案。是的,这有点奇怪;“赋值运算符(
+=,-=,*=
,等等)”包括一个自由的、不可见的强制转换操作。写入x+=y
,其中x是类型int
,y是任何类型的表达式,相当于x+=(int)y
。我不太清楚为什么规范是这样写的;我所知道的是:这永远不会改变;除非有非常好的理由,否则java不习惯做出会破坏为旧版本java编写的代码的更改,而修复这种奇怪之处也不足以保证更改的正确性
注意:是的,x+=y
表示“x的新值是x的旧值加上y的值”
*)永远不要说永远,yadayada。假设你给了我万分之一的赔率,这将在5年内在java中有所不同,我打赌这不会改变。谢谢。一点也不令人沮丧。不知道+=隐式转换。每天都在学习新的东西。。。