这可能是一个愚蠢的问题,但我在Java文档中找不到答案。如果我声明两个整数然后将它们相除,会发生什么?它们首先被转换为floats/doubles
,然后除法运算完成后再转换回integer
吗?或者说这种除法是以整数的方式进行的?
此外,根据实验结果,整数除法似乎会向零取整(即3/2=1
且-3/2=-1
)。我的理解是正确的吗?
这可能是一个愚蠢的问题,但我在Java文档中找不到答案。如果我声明两个整数然后将它们相除,会发生什么?它们首先被转换为floats/doubles
,然后除法运算完成后再转换回integer
吗?或者说这种除法是以整数的方式进行的?
此外,根据实验结果,整数除法似乎会向零取整(即3/2=1
且-3/2=-1
)。我的理解是正确的吗?
它们正在整数算术中被分割。因此,将整数a
除以整数b
,你可以得到b
适合a
的次数。同时,a%b
将给出除法的余数。所以(a / b) * b + a % b = a
Java会自动转换类型:
"它将int自动转换为double。即使没有涉及到int,它也会将short和byte转换为int,这在你想进行short或byte算术运算时需要不断烦人的强制转换。 它将基本数据类型自动转换为包装类,反之亦然,用于装箱和拆箱。" - user2357112
Java 从不在没有您指定的情况下强制转换任何内容。
但是 integer / integer = integer
。
此外,它总是截断结果。 因此,如果浮点数结果为0.999999,整数除法仍将返回0。
long v = 0; v += 3.14;
没有错误,甚至没有警告。 - Matt Whitlock