对java数据类型和文本有点困惑
所以我理解什么是数据类型和文字,但我对一件事感到困惑。 当数据类型很长时,为什么必须输入L?为什么我不用这么做呢对java数据类型和文本有点困惑,java,Java,所以我理解什么是数据类型和文字,但我对一件事感到困惑。 当数据类型很长时,为什么必须输入L?为什么我不用这么做呢 // Why does a not work but b does? Both are longs? long a = 9223372036854775807; long b = 9223372036854775807L; 在报告中明确指出: “如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。” 你的第二个问
// Why does a not work but b does? Both are longs?
long a = 9223372036854775807;
long b = 9223372036854775807L;
在报告中明确指出:
“如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。”
你的第二个问题也在这里得到了回答:
“整数类型byte、short、int和long的值可以从int文本中创建”中明确说明:
“如果整型文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母L很难与数字1区分。”
你的第二个问题也在这里得到了回答:
“整数类型byte、short、int和long的值可以从int文本中创建”如果未设置L,编译器将尝试将文本解析为int,如下面的示例场景所示 long接受介于:-9223372036854到+9223372036854775807之间的值。现在我已经创建了一个名为testLong的长变量,尽管当我插入9223372036854775807作为值时,我得到一个错误,声明:
“int 9223372036854775807的文字超出范围。”
解决方案是在末尾添加大写字母L:如果您没有设置L,编译器将尝试将文本解析为int,如下面的示例场景所示 long接受介于:-9223372036854到+9223372036854775807之间的值。现在我已经创建了一个名为testLong的长变量,尽管当我插入9223372036854775807作为值时,我得到一个错误,声明:
“int 9223372036854775807的文字超出范围。”
解决方案是在末尾加一个大写字母L:在Java中只定义了两种整数文本类型:
int
和long
。后者与前者的区别在于后缀L
或L
。(字符文字也是整数类型(例如,可以分配给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
,溢出就不会发生
为什么我不必为short
或byte
这样做
首先,请注意,int
类型的文本可以保存您可能分配给short
或byte
的任何值,因此上述问题不会发生。此外,您“不必”使用short
或byte
文本,但您不能,因为这些文本没有定义。这一直困扰着我,因为这意味着如果我们想用一个文本参数调用一个函数,我们通常必须强制转换到字节
如果您喜欢阅读standardese,您可以查阅有关的章节。Java中只定义了两种整数文本类型:int
和long
。后者与前者的区别在于后缀L
或L
。(字符文字也是整数类型(例如,可以分配给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
,溢出就不会发生