Java 为什么这些表达式给我的是输出而不是编译错误?

Java 为什么这些表达式给我的是输出而不是编译错误?,java,operators,Java,Operators,当我得到这个问题时,我正在进行一次考试。下面这个问题的结果是什么 public class ClassicQuestion { public static void main(String[] args) { int i = 25; double j = 95.0; System.out.println(j+=i); System.out.println(i+=j)

当我得到这个问题时,我正在进行一次考试。下面这个问题的结果是什么

 public class ClassicQuestion {
        public static void main(String[] args) 
        {
            int i = 25;
            double j = 95.0;
            System.out.println(j+=i);
            System.out.println(i+=j);

        }

}
答案是

编译时错误 运行时错误 一百二十点零一四五 一百二十点零一二零 我不知道正确的答案,但我认为正确的答案应该是一个,但给了我不正确的答案?如何在不进行转换的情况下将一个变量分配给不同类型的数据类型

正确答案3

因为根据

形式为E1 op=E2 evalute to E1的复合赋值运算符 =T E1 op E2,其中T是E1的类型,但E1只计算一次

那么你的 j+=i变为j=double j+i 现在j值是120.0 下一次我做i+=j时,它变为 i=inti+j

所以输出是 120.0 145

正确答案3

因为根据

形式为E1 op=E2 evalute to E1的复合赋值运算符 =T E1 op E2,其中T是E1的类型,但E1只计算一次

那么你的 j+=i变为j=double j+i 现在j值是120.0 下一次我做i+=j时,它变为 i=inti+j

所以输出是
120.0 145

引用JLS以获得更好的答案。引用JLS以获得更好的答案。