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

Sono tenta di controllare due numeri lunghi, ma quando provo a compilare questo ricevoJava JUnit assertEquals con lunghi

integer number too large: 42681241600 

errore. La documentazione mostra che esiste un metodo long, long assertEquals ma non viene chiamato.

risposta

17

desiderato:

assertEquals
assertEquals(42681241600L, 42681241600L); 

Il codice è stata chiamata (Object, Object). Dovevi anche aggiungere il carattere 'L' alla fine dei tuoi numeri, per dire al compilatore Java che il numero dovrebbe essere compilato come un long invece di un int.

7

42681241600 viene interpretato come un valore letterale int, che è troppo grande per essere. Aggiungi una 'L' per renderlo un valore letterale long.

Se si desidera ottenere tutte le tecniche, è possibile cercare §3.10.1 of the JLS:

Un numero intero letterale è di tipo long se è suffisso con una lettera ASCII L o l (ell); altrimenti è di tipo int(§4.2.1). Il suffisso L è preferito, poiché la lettera l (ell) è spesso difficile da distinguere dalla cifra 1 (una).

2

aggiungere un "L" alla fine del numero, come:

new Long(42681241600L) 

in Java, ogni numero letterale è trattato come un intero.

0

Si dovrebbe anche considerare l'utilizzo di genere Long.valueOf dal momento che questo può permettere una certa ottimizzazione:

Long val = Long.valueOf(1234L); 

Dal J2SDK:

public static lungo valueOf (long l)

Returns un'istanza lunga che rappresenta il valore lungo specificato. Se non è richiesta una nuova Lungo esempio, questo metodo deve essere usata in preferenza al costruttore Long (lungo), in quanto questo metodo è probabile a cedere significativamente migliore spazio e prestazioni in tempo mettendo in cache valori frequentemente richiesti .

Problemi correlati