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

Why these expressions are giving me output instead of compile error?

当我得到这个问题时我正在参加考试以下问题的输出是什么

 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);

        }

}

答案选项是

  1. 编译时错误
  2. 运行时间错误
  3. 120.0 145
  4. 120.0 120

我不知道正确答案,但我认为正确答案应该是一个,但我却看到了错误答案?我们如何在不转换的情况下将一个变量分配给不同类型的数据类型?

Correct Answer 3.

因为根据

jls

E1 op= E2 形式的复合赋值运算符求值为 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 仅求值一次

所以你的 j+=i 更改为 j=(double)(j+i) 从现在开始 j 值为 120.0 下次我做 i+=j 它会变成 i=(int)(i+j) 因此 145

所以输出是 120.0 145