JAVA类型转换

我知道Math.pow方法在java中返回double 。 但是这段代码在我的程序中没有产生任何错误。 编译器是否自动将(int)添加到我的代码中,还是有其他原因?

在代码之前,我声明int sum = 0; 和arg是int的数组。

 for(int i=0; i < arg.length; i++) { sum += Math.pow(2, i) * arg[i]; } 

根据jls-5.6.2二进制数字促销 :

如果任一操作数的类型为double,则另一个操作数转换为double。

表达式变为int += double ,并且根据jls-15.26.2复合赋值运算符 :

二进制运算的结果转换为左手变量的类型

结果最终转换为int