长数据类型的奇怪行为

时间:2012-01-25 17:27:38

标签: groovy

运行此命令时,Long数据类型出现问题:

Long nanos = 3 * 1000000000
println nanos

打印出-1294967296,而不是3000000000,我不知道为什么 我在this页面上看到Long已经足够了。那有什么不对?

4 个答案:

答案 0 :(得分:10)

您必须将第二个常量标记为long,否则它将被视为溢出的整数。使用:

Long nanos = 3 * 1000000000L

答案 1 :(得分:4)

您需要为文字添加后缀以暗示它们是长值。否则它们被解释为int。

  Long nanos = 3 * 1000000000L;

有关此here的更多信息。

答案 2 :(得分:4)

算法是用int进行的,然后保存为Long。试试这个:

Long nanos = 3L * 1000000000L

答案 3 :(得分:1)

您可以使用groovy shell(groovysh)轻松检查:

groovy:000> 3.class                 
===> class java.lang.Integer

文字3是java.lang.Integer

groovy:000> (3 * 1000000000).class
===> class java.lang.Integer

乘法的乘积也是java.lang.Integer

groovy:000> 3 * 1000000000        
===> -1294967296

现在很容易看到在过度发生之后整数被转换为Long