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

标签 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

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

最佳答案

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

关于java - 为什么这些表达式给我输出而不是编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877733/

相关文章:

java - 如何在Hibernate注释中指定char列的大小?

java - 字符串列表的高效交集和并集

java - eclipse 编辑器中的背景图像

c++ - 使用++ 运算符递增 map<string, int>

java - 如何使用 Junit 5 为每个测试提供单独的类加载器

java - 在 Java 中从 CharSequence 转换为 String

不同类型的 C++ 默认赋值运算符

swift 一元运算符 '++' 不能应用于 'Int!' 类型的操作数

c++ - 使用两种方法覆盖 << 运算符

javascript - 如何在 Angular http 拦截器中以异步方式缓存 http 请求?