gpt4 book ai didi

java - 为什么在 Java 中 byte 和 short 除法结果是 int?

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:01 24 4
gpt4 key购买 nike

在 Java 中,如果我们划分 byteshortint,我们总是得到一个 int。如果其中一个操作数是 long,我们将得到 long

我的问题是 - 为什么 byteshort 除法不会产生 byteshort?为什么总是 int

显然,我不是在寻找“因为 JLS 这么说”的答案,我是在询问 Java 语言中此设计决策的技术原理。

考虑这个代码示例:

    byte byteA = 127;
byte byteB = -128;
short shortA = 32767;
short shortB = -32768;
int intA = 2147483647;
int intB = - -2147483648;
long longA = 9223372036854775807L;
long longB = -9223372036854775808L;


int byteAByteB = byteA/byteB;
int byteAShortB = byteA/shortB;
int byteAIntB = byteA/intB;
long byteALongB = byteA/longB;

int shortAByteB = shortA/byteB;
int shortAShortB = shortA/shortB;
int shortAIntB = shortA/intB;
long shortALongB = shortA/longB;

int intAByteB = intA/byteB;
int intAShortB = intA/shortB;
int intAIntB = intA/intB;
long intALongB = intA/longB;

long longAByteB = longA/byteB;
long longAShortB = longA/shortB;
long longAIntB = longA/intB;
long longALongB = longA/longB;

byteA 除以 byteB 只能是一个字节,对吗?
那么为什么 byteAByteB 必须是 int?为什么shortALongB不能short
为什么 intALongB 必须是 long,结果总是适合 int,不是吗?

更新

正如@Eran 指出的那样,(byte)-128/(byte)-1 导致 128 不适合 byte .但为什么不 short 呢?

更新 2

接下来,正如@Eran(再次)指出的那样,(int) -2147483648/(int) -1 也不适合 int 但结果仍然是 int,不是 long

最佳答案

byteA divided by byteB can't be anything but a byte, can it?

它可以不是字节:

byteA = -128;
byteB = -1;
int div = byteA/byteB; // == 128, not a byte

关于java - 为什么在 Java 中 byte 和 short 除法结果是 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41034555/

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