0

を使用すると、2つのわずかに、しかし自明ではない異なるバイト配列が同じBigIntegerになる可能性があることを誰かが説明してもらえますpublic BigInteger(byte[] val)か?

どのようにすることができます ...

import java.math.BigInteger;

public class BigIntegerTest
{
    public static void main(String[] args)
    {
        BigInteger a = new BigInteger(new byte[] {-1, -1, -1, -1, 123});
        BigInteger b = new BigInteger(new byte[] {-1, 123});

        System.out.println(a.toString(16)+" .equals "+b.toString(16)+" ? "+(a.equals(b)));
    }
}

... true を印刷しますか?

私はJavaDocsを誤解していると確信していますが、どこにあるのかわかりません。そして、ソースを確認します...しかし、ええと、私はそれを見つけることができません.

私は何が欠けていますか?

4

2 に答える 2

2

最初のものには、2 番目のものと同じ値に加えて、左側に多くの符号拡張が含まれています。

于 2012-10-27T02:30:39.297 に答える
0

, を使用するとnew BigInteger(byte[]);、最初にバイト配列内の符号なしバイトが検索され、次に符号付きバイトが収集されて数値が取得されます。

どちらの例でも、符号なしバイトは同じ123です。符号付きバイトも同じ-1です。唯一の違いは、最初の例では、無視される余分な符号バイトがあることです。

署名されたバイトと署名されていないバイトを収集した後、両方の数値が同じBigInteger valueであるためequalstrue.

于 2012-10-27T02:41:47.177 に答える