ChatGPT解决这个技术问题 Extra ChatGPT

在Java中初始化一个long

Primitive Data Types - oracle doc 表示 Java 中 long 的范围是 -9,223,372,036,854,775,8089,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 呢?
@WolfgangFahl Long 的规则相同 - 由于自动装箱,您可以使用 Long i = 12345678910L,或者在无法使用自动装箱的情况下使用 Long i = Long.valueOf(12345678910L)

M
MByD

您应该添加 L: long i = 12345678910L;。是的。

顺便说一句:它不必是大写 L,但小写与 1 混淆了很多次:)。


以防万一有人想知道:十六进制也是如此,例如 0x200000000L
@Victor Long.valueOf(long) 返回一个 Long,而不是原始 long。 MByD 的解决方案避免依赖自动装箱。
@user149408 也许您的意思是 0x20000000L
@Pluto 0x20000000L 可以工作,但仍然可以用 int(一个 32 位整数)表示,因此 0x20000000 也可以工作。 0x200000000L 打破了这个界限,使得后面的 L 成为必要。
J
Jack Edmonds

您需要将 L 字符添加到数字的末尾以使 Java 将其识别为长。长 i = 12345678910L;是的。

请参阅 Primitive Data Types,它说“如果整数文字以字母 L 或 l 结尾,则它的类型为 long;否则,它的类型为 int。”


A
Amir Raminfar

您需要像这样在末尾添加大写 L

long i = 12345678910L;

3.0f 的浮动也是如此

哪个应该回答你的两个问题


S
Shawn Mehan

要初始化 long,您需要在末尾附加“L”。它可以是大写或小写。

默认情况下,所有数值都是 int。即使您对任何整数执行 byte 的任何操作,byte 都会首先提升为 int,然后执行任何操作。

尝试这个

byte a = 1; // declare a byte
a = a*2; //  you will get error here

您会收到错误,因为 2 默认为 int
因此,您尝试将 byteint 相乘。因此,结果被类型转换为 int,而无法分配回 byte