2011-03-04 81 views
4

这必须是非常愚蠢的,但是,我想做到以下几点:的Java龙将不打印正确

long mult = 2147483647 + 2147483647 + 2; 
System.out.println(mult); // result = 0 

现在,我varaible mult将是一个10位数字,以及在长期范围内。所以我不明白为什么它打印出0。谁能解释为什么?

回答

12

由于三个常量值为int s,因此算术是用int而不是long完成的。您分配给long变量的事实是无关紧要的。试试这个:

long mult = 2147483647L + 2147483647L + 2L; 

你也许可以用做只是文字,如果你很小心很长的文字之一逃脱 - 但我个人将它应用到所有的人,只是要清楚,你想要一切的算术运算long

+0

伟大的作品,谢谢!我不知道我的常量被视为整数 – f20k 2011-03-04 14:29:25

3

如何:

long mult = 2147483647L + 2147483647 + 2; 
1

那是因为当你给任何数量的直接像num1 + num2他们被视为整数,因为该值是出在这种情况下边界的你将得到0或取决于其他输出输入。

您可以轻松地通过改变解决这

long mult = 2147483647; 
mult += 2147483647; 
mult += 2; 
System.out.println(mult);