gpt4 book ai didi

java - 对 java 数据类型和文字有点困惑

转载 作者:行者123 更新时间:2023-11-29 06:59:48 26 4
gpt4 key购买 nike

所以我明白数据类型和文字是什么,但我对一件事感到困惑。为什么当数据类型很长时我必须放一个 L?为什么我不必为 short 或 byte 执行此操作?

// Why does a not work but b does? Both are longs? 

long a = 9223372036854775807;
long b = 9223372036854775807L;

最佳答案

Java 中只定义了两种整数文字类型:intlong。后者通过后缀 Ll 与前者区分开来。 (字 rune 字也是整数类型(例如,可以分配给 int)但 Java 语言规范 (JLS) 将其与整数文字分开处理。)

请记住(除了推断泛型类型参数),赋值左侧的类型对右侧的求值没有影响。因此,如果您将某些内容分配给类型为 long 的变量,表达式将首先 求值,然后才将结果转换为 long (如果可能和必要的话)。

声明

long a = 10;

完全有效。仅由整数文字 10 组成的右侧表达式将被求值,然后提升为 long,然后将其分配给变量 a。这很好用,除非你想分配一个太大而无法在 int 中表示的值,在这种情况下你还必须制作 long 类型的文字.

这个“问题”不仅限于文字。考虑以下经常咬新用户的语句:

long a = Integer.MAX_VALUE + 1;

右侧的表达式是使用 int 算术求值的,因此会溢出。只有这样结果 (−2147483648) 才会被提升为 long 并分配给 a 但现在已经太晚了。如果 1 写成 1L,就不会发生溢出。

How come I don't have to do that for short or byte?

首先,请注意 int 类型的字面量可以包含您可能分配给 shortbyte 的任何值,因此问题描述以上不可能发生。此外,并不是说您“不必”使用 shortbyte 文字,而是您不能 因为这样的文字没有定义。这一直困扰着我,因为这意味着如果我们想调用带有文字参数的函数,我们通常必须转换为 byte

如果你喜欢阅读标准语,你可以查看关于Integer Literals (§ 3.10.1) in the JLS的章节。 .

关于java - 对 java 数据类型和文字有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28017796/

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