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

目前,我正在使用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;


弑天下
浏览 477回答 3
3回答

人到中年有点甜

L在末尾添加大写字母:long value = 9223372036854775807L;否则,编译器将尝试将文字解析为int,因此出现错误消息

慕标5832272

我不知道为什么它将长数据类型称为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 如果值是类型的范围内。

慕容3067478

long ak = 34778754226788444L/l;两者都使用,但一次只能使用大写L或小写l。为什么要使用L / l?因为long是整数数据类型的一部分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL