为了账号安全,请及时绑定邮箱和手机立即绑定

类型为int的文字xyz超出范围

类型为int的文字xyz超出范围

弑天下 2019-12-13 17:10:52
目前,我正在使用Java处理数据类型,如果我正确理解该类型,则可long接受的值介于-9,223,372,036,854到+9,223,372,036,854,775,807之间。现在,您可以在下面看到,我创建了一个Long变量,名为testLong,尽管当我将9223372036854775807插入为值时,我收到一条错误消息:“ int类型的文字9223372036854775807超出范围。”我不知道为什么它将long数据类型称为int有人有想法么?下面的代码:char testChar = 01;byte testByte = -128;int testInt = -2147483648;short testShort = -32768;long testLong = 9223372036854775807;float testFoat;double testDouble = 4.940656458412;boolean testBool = true;
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

L在末尾添加大写字母:


long value = 9223372036854775807L;

否则,编译器将尝试将文字解析为int,因此出现错误消息


查看完整回答
反对 回复 2019-12-14
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我不知道为什么它将长数据类型称为int


它不是。您应该学会信任编译器消息(尤其是当它们来自健全,现代的编译器而不是古老的C / C ++编译器时)。尽管他们有时说的语言可能很难理解,但他们通常不会对您说谎。


让我们再来看一看:


int 9223372036854775807的文字超出范围。


注意,它在任何地方都没有提及您的变量testLong或类型long,因此它与初始化无关。该问题似乎在其他时候发生。


现在让我们研究消息的某些部分:


int告诉我们他想将某些东西视为一种int价值(这不是您想要的!)

“超出范围”非常清楚:某些内容不在预期范围内(可能是int)

“文字”:现在很有趣:什么是文字?

我将离开舒适的列表,讨论一下文字:文字是在代码中具有一定价值的地方。有String文字,int文字,class文字等等。每次您在代码中明确提及一个值时,它都是文字。


因此,它实际上并不是在困扰您关于变量声明,而是数字本身,值就是在困扰您。


您可以在a long和an int均可接受的上下文中使用相同的文字来轻松地验证这一点:


System.out.println(9223372036854775807);

PrintStream.println可以带一个int或一个long(或几乎其他任何东西)。这样的代码就可以了,对吧?


不会。也许应该这样,但是根据规则,这样做并不好。


问题在于“某些数字”被定义为int文字,因此必须在定义的范围内int。


如果要编写long文字,则必须通过附加L(或小写)使其明确l,但我强烈建议您始终使用大写形式,因为它更容易阅读且更容易被误认为是1。


请注意,float(postfix F/ f)和double(postfix D/ d)也会发生类似的问题。


旁注:您将意识到没有byteor short文字,您仍然可以将值(通常是int文字)分配给byte和short变量:这可能是由于§5.2中有关Assignment Converson的特殊规则所致:它们允许分配较大类型的常量表达式到byte,short,char或int 如果值是类型的范围内。



查看完整回答
反对 回复 2019-12-14
?
慕容3067478

TA贡献1773条经验 获得超3个赞

long ak = 34778754226788444L/l;

两者都使用,但一次只能使用大写L或小写l。


为什么要使用L / l?因为long是整数数据类型的一部分。


查看完整回答
反对 回复 2019-12-14
  • 3 回答
  • 0 关注
  • 476 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信