Mat*_*nan 86 java int long-integer
我目前正在使用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;
Run Code Online (Sandbox Code Playgroud)
Luk*_*der 189
添加资金L到最后:
long value = 9223372036854775807L;
Run Code Online (Sandbox Code Playgroud)
否则,编译器将尝试将文字解析为int,因此错误消息
Joa*_*uer 46
我不知道为什么它将long数据类型称为int
它不是.您应该学会信任编译器消息(特别是当它们来自理智的现代编译器而不是古老的C/C++编译器时).虽然他们说的语言有时很难破译,但他们通常不会骗你.
让我们再看一遍:
int 9223372036854775807的字面值超出范围.
请注意,它没有testLong在long任何地方提及您的变量或类型,因此它与初始化无关.问题似乎发生在其他一些问题上.
现在让我们研究一下消息的一些部分:
int告诉我们他想把某事当作一种int价值(这不是你想要的!)int)我将离开舒适的列表来讨论文字片刻:文字是你在代码中有一些价值的地方.有String文字,int文字,class文字等.每次在代码中明确提到值时,它都是文字.
所以它实际上并没有唠叨变量声明,而是数字本身,价值就是它唠叨你的意思.
您可以通过在a long和a int同样可接受的上下文中使用相同的文字来轻松验证这一点:
System.out.println(9223372036854775807);
Run Code Online (Sandbox Code Playgroud)
PrintStream.println可以采取一个int或一个long(或几乎任何其他).所以代码应该没问题吧?
号哦,也许这应该是,但按规定它是不精.
问题是"某些数字"被定义为int文字,因此必须在由...定义的范围内int.
如果你想写一个long文字,那么你必须通过附加L(或小写l,但我强烈建议你总是使用大写变体,因为它更容易阅读,更难以误解a 1)来明确表达.
请注意,float(postfix F/ f)和double(postfix D/ d)会出现类似的问题.
旁注:你会发现没有byte或short文字,你仍然可以为值和变量分配值(通常是int文字):由于第5.2节关于赋值转换的特殊规则,这是可能的:它们允许分配更大类型的常量表达式到,,或如果值是类型的范围内.byteshortbyteshortcharint
| 归档时间: |
|
| 查看次数: |
82256 次 |
| 最近记录: |