代码之家  ›  专栏  ›  技术社区  ›  Sumit Murari

Java中Long对象和原始类型Long之间有什么区别?

  •  0
  • Sumit Murari  · 技术社区  · 10 年前

    我以为长课和长课差不多是一回事。 我看到了 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 回复  |  直到 7 年前
        1
  •  4
  •   Sotirios Delimanolis    10 年前

    表达式

    1000000 * 1000000;
    

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

    你需要做长乘法

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

    其中至少有一个操作数是 long 另一个晋升为 长的 (如果还没有)。

        2
  •  2
  •   Adrian Shum    10 年前

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

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


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

    不过我猜你在做什么

    long l = 1000000 * 10000000;
    

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

    字面意义的 1000000 事实上是 int 而不是 long 因此, 1000000 * 10000000 正在进行 整数 乘法运算,结果溢出(最大值为 整数 大约是2,xxx,xxx,xxx)。然后将“溢出”值转换为long。这给了你一个“奇怪”的结果。