Java中长对象和原始类型有什么区别?

时间:2014-03-01 06:23:41

标签: java long-integer

我认为很长,而且Long课程或多或少都是一样的。 我看到了link

当我显示Long.MAX_VALUE时,显示9223372036854775807。 但当我做1000000*1000000的倍增时10^12;它给了溢出。

我使用长数据类型来存储值...并且在调试时它在乘法后具有值-727379968

我在哪里弄错了或者我完全是笨蛋?


更新:这是我的代码,我在答案中指出了我的错误。
 
 for (;;)
    ppltn[i] = Integer.parseInt(tk.nextToken());

for (int i = 0; i < noc; i++) //sum is of long type sum = sum + min * ppltn[i]; //min and ppltn are of integer type

2 个答案:

答案 0 :(得分:4)

表达式

1000000 * 1000000;

是整数乘法,因为两个操作数都是整数。因此,您受到整数的最大值的限制。

你需要进行长时间的乘法

1000000L * 1000000 /* L if you want it*/;

其中至少有一个操作数是long而另一个操作数被提升为long(如果还没有)。

答案 1 :(得分:2)

在Java中,^并不意味着“权力”。它是一个按位XOR运算符。

因此,10 ^ 6表示10 XOR 6而不是10 * 10 * 10 * 10 * 10 * 10


如果没有看到您的代码,很难猜到。

但是我的猜测是你正在做像

这样的事情
long l = 1000000 * 10000000;

如果是这样,这就是问题所在。

文字1000000实际上是int而不是long,因此,1000000 * 10000000正在进行int乘法并且它会溢出(最大值为int大概是2,xxx,xxx,xxx)。然后将“溢出”值强制转换为长整数。这会给你带来“奇怪”的结果。