用Java初始化long


213

原始数据类型-甲骨文的文档说的范围long在Java是-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错误。

有两个问题。

1)如何long使用值初始化12345678910

2)默认情况下所有数字文字是否都是type int


初始化Long怎么样?
沃尔夫冈·法尔

1
@WolfgangFahl的相同规则Long-由于自动装箱,您可以使用Long i = 12345678910LLong i = Long.valueOf(12345678910L)在无法使用自动装箱的情况下使用。
多里安·格雷

Answers:


422
  1. 您应该添加Llong i = 12345678910L;
  2. 是。

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


3
万一有人想知道:十六进制也一样,例如0x200000000L
user149408

@Victor Long.valueOf(long)返回Long,而不是原始long。MByD的解决方案避免依赖自动装箱。
gouessej

@ user149408也许您的意思是0x20000000L
冥王星

2
@Pluto 0x20000000L可以工作,但仍可以由int(32位整数)表示,因此0x20000000也可以工作。0x200000000L打破边界,使尾随成为L必要。
user149408 '18

58
  1. 您需要L在数字的末尾添加字符,以使Java识别它为长号。

    long i = 12345678910L;
  2. 是。

请参阅原始数据类型,其中说:“如果整数文字以字母L或l结尾,则其类型为long;否则为int类型。”



15

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

默认情况下,所有数值都是int。即使当您对byte任何整数进行任何运算时,byte也会先提升为int,然后再执行任何运算。

试试这个

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

由于2默认情况下,您会收到错误消息int
因此,你想乘byteint。因此,结果被强制转换为类型int,不能分配给byte

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.