gpt4 book ai didi

java - java中的隐式转换运算符+=

转载 作者:行者123 更新时间:2023-12-03 07:05:31 25 4
gpt4 key购买 nike

我发现 java 编译对于使用 int 和 float 的赋值和自赋值语句有非预期的行为。

以下代码块说明了该错误。

    int i = 3;
float f = 0.1f;

i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
  • 在自赋值i += f中,编译不会发出错误,但计算结果是一个值为3的int,并且变量i 维持值3

  • i = i + f 表达式中,编译器会发出错误,并显示“错误:可能会丢失精度” 消息。

    <

有人可以解释一下这种行为吗?

编辑:我已将此代码块发布在 https://compilr.com/cguedes/java-autoassignment-error/Program.java

最佳答案

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2

Java 语言规范说:

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

因此,i += f 相当于 i = (int) (i + f)

关于java - java中的隐式转换运算符+=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com