Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,为什么我可以将double添加到int,但不能将double分配给int?_Java_Primitive Types - Fatal编程技术网

在Java中,为什么我可以将double添加到int,但不能将double分配给int?

在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寻求答案。因为语言规范如此规定。也许这是一个令人沮丧的答案——但这是唯一正确的答案。是的,这有点奇怪;“赋值运算符(+=,-=,*=,等等)”包括一个自

在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寻求答案。

因为语言规范如此规定。也许这是一个令人沮丧的答案——但这是唯一正确的答案。是的,这有点奇怪;“赋值运算符(
+=,-=,*=
,等等)”包括一个自由的、不可见的强制转换操作。写入
x+=y
,其中x是类型
int
,y是任何类型的表达式,相当于
x+=(int)y
。我不太清楚为什么规范是这样写的;我所知道的是:这永远不会改变;除非有非常好的理由,否则java不习惯做出会破坏为旧版本java编写的代码的更改,而修复这种奇怪之处也不足以保证更改的正确性

注意:是的,
x+=y
表示“x的新值是x的旧值加上y的值”


*)永远不要说永远,yadayada。假设你给了我万分之一的赔率,这将在5年内在java中有所不同,我打赌这不会改变。

谢谢。一点也不令人沮丧。不知道+=隐式转换。每天都在学习新的东西。。。