我现在很困惑。
我有一个GregorianCalendar
对象,我给出了具体日期(2010年1月1日)。
日历:
Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
输出:
Fri Jan 01 13:12:57 CET 2010
1262347977927
现在,当我尝试创建long
并将此数字存储在其中时,该数字实际上对于我的变量来说太大了。
存储在变量中:
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
但是当我将结果直接存储到我的变量中时,它可以正常工作。
直接存储:
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
输出:
1262348451631
为什么我变得太长而不长,但又不长就不长?我很困惑。
如果有人想知道,我正在使用Java 6和Eclipse Indigo。
编辑:感谢所有即时答案......我现在感到非常愚蠢:p
答案 0 :(得分:7)
您只需在文字后添加 L :
long timeStamp = 1262347977927L;
答案 1 :(得分:6)
始终参考文档Primitive Data Types:
如果整数字面以 L 或 l 字母结尾,则其类型为长; 否则它的类型为 int 。建议您使用鞋面 大小写 L ,因为小写字母 l 很难区分 来自数字 1 。
答案 2 :(得分:5)
您必须附加L
或l
long timeStamp = 1262347977927L;
为指定值的字面值,否则编译器会假定整数值
前者是优选的,因为后者看起来像1
!
答案 3 :(得分:5)
在数字末尾使用L:
long timeStamp = 1262347977927L;
它将Number定义为Long。
答案 4 :(得分:4)
没有1262347977927
对于长数字(8字节)来说不够大。
像这样:
long timeStamp = 1262347977927L;
L for long declaration。
原因是,在Java中,默认情况下,所有数字都被视为int类型,除非您最后放置L
之类的开关。
或简单:
long timeStamp = c.getTimeInMillis()
答案 5 :(得分:4)
更改
long timeStamp = 1262347977927;
到
long timeStamp = 1262347977927L;
请注意,您需要后缀为“L”(首选)或“l”(后缀可能导致难以阅读的代码;最后会有一个与此相关的java puzzler条目)。
答案 6 :(得分:4)
它没有告诉你1262347977927不能适应长,它告诉你它甚至不能构造一个值为1262347977927的int常量,直到它甚至试图将它分配给long变量。请注意错误中从未提及timeStamp:
int类型的文字1262347977927超出范围
在数字后面使用L将其标记为长常数,然后您可以毫无问题地分配它:
long timeStamp = 1262347977927L;
答案 7 :(得分:2)
尝试在数字后附加“L”,同时将其分配给长变量。