gpt4 book ai didi

java - 为什么 int 变量在分配给 byte 变量时抛出错误,而不是 int 文字?

转载 作者:行者123 更新时间:2023-11-29 10:08:27 24 4
gpt4 key购买 nike

我最近开始学习Java,不能只了解这门语言的一个特性。

当我编写下面的代码时,我没有收到任何错误(而且我不应该这样做!):

byte b = 10 * 2

但是,当我输入以下代码时,编译器会抛出一个错误:

int i = 10;
byte b = i * 2

当编译器可以对 10 * 2 进行检查以确保它小于 byte 的范围时,为什么它不能对 i * 2 看是否小于byte的范围?

它与比特的低级表示有关,还是与内存有关?

最佳答案

在 Java 中,每当您尝试执行算术表达式时,如果表达式包含任何类型的变量,Java 都会将该表达式的所有元素转换为该表达式中可用的最高数据类型。

因此,

当你执行 10*2 时,两个操作数都是文字,而不是变量,因此不会自动提升操作数和结果的数据类型,除非结果超出数据类型的范围,这里是字节并且 20 完全低于字节范围。

但是当你执行 i*2 时,Expression 由变量组成,其中 i 是一个 int,结果是 20 但是,它的类型将是 int。因为操作数自动提升为 int,即这里的 20 将在计算表达式时提升为 int,结果将是 int,因为两个操作数都是 int。一个 int 不能存储在一个字节中,即使它在它的范围内。因为编译器会认为如果将一个 int 存储在一个字节中将会丢失值。

因此,在这种情况下,您必须强制将其类型转换为字节。

byte b = (byte)(i*2);

尝试运行这个你会惊讶的:

byte b = 10;
b = b * 2;

这个的解释还是和上面说的一样。

关于java - 为什么 int 变量在分配给 byte 变量时抛出错误,而不是 int 文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843954/

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