gpt4 book ai didi

java - Java 中的浮点疯狂与隐式转换?

转载 作者:行者123 更新时间:2023-12-01 19:35:05 26 4
gpt4 key购买 nike

为什么会这样,假设 A 是一个整数数组,D 是一个 double 组,K 是一个整数,

int v = ((A[i+1]-A[i])/D);
K -= v;

在 Java 中会产生编译错误,但是

double v = ((A[i+1]-A[i])/D);
K -= v;

不是吗?

更奇怪的是,

一个

K -= ((A[i+1]-A[i])/D);

给出的结果与

不同

B

K -= (int)((A[i+1]-A[i])/D);

这对我来说毫无意义?我总是假设 A) 永远不会编译(尝试将 double 隐式转换为整数)。

有人可以帮我解释一下吗?

谢谢

最佳答案

第二种情况包括 (int) 转换,因为复合运算符(例如 -=)的定义。请参阅 Java 语言规范,15.26.2. Compound Assignment Operators :

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.

K -= v;相当于 K = (int)((K) - (v)) ,除了 K仅评估一次。

(A) 以 double 算术进行减法。 (B) 将 ((A[i+1]-A[i])/D) 的计算结果转换为 int 后,以 int 算术进行减法.

关于java - Java 中的浮点疯狂与隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125148/

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