int 类型的文字 xyz 超出范围

2022-08-31 09:58:40

我目前正在Java中使用数据类型,如果我理解正确,该类型接受-9,223,372,036,854,775,808到+9,223,372,036,854,775,807之间的值。现在,正如您在下面看到的,我创建了一个名为 的变量,尽管当我插入9223372036854775807作为值时,我收到一个错误,指出:longlongtestLong

int 类型的文字9223372036854775807超出范围。

我不知道为什么它将数据类型称为.longint

有人有什么想法吗?

法典:

char testChar = 01;
byte testByte = -128;
int testInt = -2147483648;
short testShort = -32768;
long testLong = 9223372036854775807;
float testFoat;
double testDouble = 4.940656458412;
boolean testBool = true;

答案 1

在末尾添加大写字母:L

long value = 9223372036854775807L;

否则,编译器将尝试将文本解析为 ,因此会出现错误消息int


答案 2

我不知道为什么它将长数据类型称为int

事实并非如此。你应该学会信任编译器消息(特别是当它们来自理智的现代编译器,而不是那些往往有错误错误消息的古代编译器时)。虽然他们所说的语言有时可能很难破译,但他们通常不会对你撒谎。

让我们再看一遍:

int 9223372036854775807 的字面量超出范围。

请注意,它没有任何地方提及您的变量或类型,因此问题在于初始化。它似乎发生在其他某个时刻。testLonglong

现在让我们调查消息的一些部分:

  • int告诉我们他想把某样东西当作一种价值(这不是你想要的!int
  • “超出范围”非常清楚:某些内容不在预期范围内(可能是int)
  • “字面意思”:现在这很有趣:什么是字面意思?

我将离开舒适的列表,暂时讨论一下文字:文字是您在代码中具有一定价值的地方。有文字,文字,文字等等。每次在代码中显式提及时,它都是一个文本。Stringintclass

因此,它实际上并不是在唠叨你关于变量声明的问题,而是数字本身,值是它困扰你的东西。

您可以通过在 a 和 a 同样可接受的上下文中使用相同的文本来轻松验证这一点:longint

System.out.println(9223372036854775807);

PrintStream.println可以采用int(或几乎任何其他内容)。所以代码应该没问题,对吧?

不。好吧,也许应该是,但根据规则,这并不好。

问题在于,“某些数字”被定义为 int 文本,因此必须在 定义的范围内。int

如果你想写一个文字,那么你必须通过附加(或小写,但我强烈建议你总是使用大写的变体,因为它更容易阅读,更难误认为是一个)。longLl1

请注意,(后缀 /) 和 (后缀 /) 也出现了类似的问题。floatFfdoubleDd

附注:您将意识到没有或文本,您仍然可以为和变量分配值(通常是文本):这是可能的,因为§ 5.2中关于赋值上下文中的转换的特殊规则:它们允许将较大类型的常量表达式赋值到 ,或者如果值在类型范围内。byteshortintbyteshortbyteshortcharint


推荐