我正在运行此timer example,我将i
从int更改为float,以测试我的机器潜力:-):
//measuring elapsed time using System.nanoTime
long startTime = System.nanoTime();
for(long i=0; i< 9100080000; i++){
Object obj = new Object();
}
long elapsedTime = System.nanoTime() - startTime;
但是java抱怨说:
1 error found:
File: C:\Users\Adel\Code\Javas\MeasureTimeExampleJava.java [line: 16]
Error: integer number too large: 9100080000
它是说“整数”,意味着一个长整数?但不会长期适应9,100,080,000吗? 2 ^ 63是9223372036854775808。任何提示表示感谢!
答案 0 :(得分:13)
变量不是int
- 它是你正在比较它的文字。你只需要:
i < 9100080000L
编译器不使用“你正在用文字做什么”作为确定文字的类型的过程的一部分,也不改变基于文字的文字类型价值(与C#不同,其中9100080000
将隐式输入为long
,因为它对于int
来说太大了。
如果整数文字后缀为ASCII字母L或l(ell),则其长度为long;否则它的类型为int(§4.2.1)。
...
int类型的最大十进制文字是2147483648(2 31 )。
从0到2147483647的所有小数文字都可能出现在可能出现int literal的任何地方。
如果int类型的十进制文字大于2147483648(2 31 ),或者十进制文字2147483648出现在除一元的操作数以外的任何地方,则为编译时错误运算符(第15.15.4节)。
请注意,虽然L
和l
都有效,但我总是建议使用L
来表示清晰度 - 否则它看起来非常像1
,具体取决于你的字体。
答案 1 :(得分:3)
9100080000
是一个常规整数常量,它超出范围。要使其成为 long 整数常量,因此它将在范围内,您可以追加L
或l
:
for(long i=0; i< 9100080000L; i++){
答案 2 :(得分:1)
在您的号码中添加“l”。 java中的默认数字是整数。 for(long i = 0; i&lt; 9100800000l; i ++){ Object obj = new Object(); }
答案 3 :(得分:1)
您需要将9100080000设置为long。
示例:
for (long i = 0; i < 9100080000L; i++)
{
// do something - note the 9100080000L
}