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

时间:2015-04-26 12:39:42

标签: 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);

        }

}

答案选项是

  1. 编译时错误
  2. 运行时错误
  3. 120.0 145
  4. 120.0 120
  5. 我不知道正确的答案,但我认为正确的答案是一个,但给我错误的答案?如何在不转换的情况下将一个变量分配给不同类型的数据类型?

1 个答案:

答案 0 :(得分:4)

  

正确答案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

所以OUTPUT是 120.0 145