12
    assertEquals( new Long(42681241600) , new Long(42681241600) );

私は2つの長い数字をチェックしようとしていますが、これをコンパイルしようとすると、

    integer number too large: 42681241600   

エラー。ドキュメントには、Long、Long assertEqualsメソッドがあることが示されていますが、呼び出されていません。

4

4 に答える 4

20

あなたが欲しい:

assertEquals(42681241600L, 42681241600L);

あなたのコードはassertEquals(Object、Object)を呼び出していました。また、数値の最後に「L」文字を追加して、数値をintではなくlongとしてコンパイルする必要があることをJavaコンパイラに通知する必要がありました。

于 2009-06-18T14:37:55.640 に答える
7

42681241600はintリテラルとして解釈されますが、大きすぎて大きすぎます。'L'を追加してlongリテラルにします。

すべての技術を取得したい場合は、JLSの§3.10.1を調べることができます:

整数リテラルはlong、ASCII文字Lまたはl(ell)の接尾辞が付いている場合はタイプです。それ以外の場合はタイプint (§4.2.1)です。文字(ell)は数字(1)と区別するのが難しいことが多いため、接尾辞Lが推奨されます。l1

于 2009-06-18T14:38:22.393 に答える
5

通常は、Long.valueOf を使用することも検討する必要があります。これにより、最適化が可能になる可能性があるためです。

Long val = Long.valueOf(1234L);

J2SDKから:

public static Long valueOf(long l)

指定された long 値を表す Long インスタンスを返します。新しい Long インスタンスが必要ない場合は、コンストラクター Long(long) よりもこのメソッドを使用する必要があります。このメソッドは、頻繁に要求される値をキャッシュすることにより、空間と時間のパフォーマンスが大幅に向上する可能性が高いためです。

于 2009-06-18T17:40:21.360 に答える
2

次のように、番号の最後に「L」を追加します。

new Long(42681241600L)

Javaでは、すべてのリテラル数は整数として扱われます。

于 2009-06-18T14:38:50.317 に答える