2009-06-18 29 views
6
assertEquals(new Long(42681241600) , new Long(42681241600)); 

estoy intenta comprobar dos números largos pero cuando intento compilar este recibo el errorJava JUnit assertEquals con larga

integer number too large: 42681241600 

. La documentación muestra que hay un método Long, Long assertEquals pero no se llama.

Respuesta

17

que desee:

assertEquals
assertEquals(42681241600L, 42681241600L); 

Su código fue llamando al (Object, Object). También necesita agregar el carácter 'L' al final de sus números, para decirle al compilador de Java que el número debe compilarse como un largo en lugar de un int.

7

42681241600 se interpreta como un literal int, que es demasiado grande para ser. Agregue una 'L' para que sea un literal long.

Si desea obtener toda técnica, puede buscar §3.10.1 of the JLS:

un literal entero es de tipo long si se añade como sufijo con una letra ASCII L o l (ELL); de lo contrario, es del tipo int(§4.2.1). Se prefiere el sufijo L, porque la letra l (ell) a menudo es difícil de distinguir del dígito 1 (uno).

2

asignar "L" al final de su número, como:

new Long(42681241600L) 

en Java, cada número literal es tratado como un entero.

0

También debe considerar el uso general Long.valueOf ya que esto puede permitir una optimización:

Long val = Long.valueOf(1234L); 

Desde el J2SDK:

pública a largo valueOf estática (larga l)

devoluciones una instancia Larga que representa el valor largo especificado. Si no se requiere un nuevo instancia largo, este método generalmente se debe utilizar en preferencia al constructor largo (long), ya que este método es probable para producir significativamente mejor espacio y el tiempo de actuación de almacenamiento en caché de valores solicitados con frecuencia .

Cuestiones relacionadas