Primitive Data Types - oracle doc 表示 Java 中 long
的范围是 -9,223,372,036,854,775,808
到 9,223,372,036,854,775,807
。但是当我在我的日食中做这样的事情时
long i = 12345678910;
它向我显示“The literal 12345678910 of type int is out of range
”错误。
有2个问题。
1) 如何使用值 12345678910
初始化 long
?
2) 默认情况下,所有数字文字都是 int
类型吗?
Long
的规则相同 - 由于自动装箱,您可以使用 Long i = 12345678910L
,或者在无法使用自动装箱的情况下使用 Long i = Long.valueOf(12345678910L)
。
您应该添加 L: long i = 12345678910L;。是的。
顺便说一句:它不必是大写 L,但小写与 1
混淆了很多次:)。
您需要将 L 字符添加到数字的末尾以使 Java 将其识别为长。长 i = 12345678910L;是的。
请参阅 Primitive Data Types,它说“如果整数文字以字母 L 或 l 结尾,则它的类型为 long;否则,它的类型为 int。”
您需要像这样在末尾添加大写 L
long i = 12345678910L;
3.0f
的浮动也是如此
哪个应该回答你的两个问题
要初始化 long,您需要在末尾附加“L”。它可以是大写或小写。
默认情况下,所有数值都是 int
。即使您对任何整数执行 byte
的任何操作,byte
都会首先提升为 int
,然后执行任何操作。
尝试这个
byte a = 1; // declare a byte
a = a*2; // you will get error here
您会收到错误,因为 2
默认为 int
。
因此,您尝试将 byte
与 int
相乘。因此,结果被类型转换为 int
,而无法分配回 byte
。
0x200000000L
0x20000000L
?0x20000000L
可以工作,但仍然可以用int
(一个 32 位整数)表示,因此0x20000000
也可以工作。0x200000000L
打破了这个界限,使得后面的L
成为必要。