2015-04-26 43 views
1

我给一个考试时,我得到了这个问题,什么是以下问题为什么这些表达式给我输出而不是编译错误?

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

我不知道正确的答案,但我认为正确的答案是一个,但显示我不正确的答案?我们如何将一个变量分配给不同类型的数据类型而无需转换?

回答

4

正确答案3.

因为根据

jls

形式E1 op= E2 evalute到E1 = (T) ((E1) op (E2))的复合赋值运算符,其中T是的类型E1,E1除外只计算一次

所以你 j+=i更改j=(double)(j+i) 既然现在j120.0 下一次我不会i+=j它改变 i=(int)(i+j)因此145

所以输出是 120.0 145

+0

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

相关问题