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

我试图检查两个长数字,但是当我尝试编译这个时,我得到了

    integer number too large: 42681241600   

错误。文档显示有一个 Long,Long assertEquals 方法,但它没有被调用。

4

4 回答 4

20

你要:

assertEquals(42681241600L, 42681241600L);

您的代码正在调用 assertEquals(Object, Object)。您还需要在数字末尾附加“L”字符,以告诉 Java 编译器该数字应编译为 long 而不是 int。

于 2009-06-18T14:37:55.640 回答
7

42681241600 被解释为一个int字面量,它太大了。附加一个“L”以使其成为long文字。

如果您想获得所有技术知识,可以查看JLS 的 §3.10.1

如果整数文字以 ASCII 字母或(ell)long为后缀,则它是类型;否则它是类型(§4.2.1)。后缀是首选,因为字母(ell) 通常很难与数字(one) 区分开来。Llint Ll1

于 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 回答