Inizializza un long in Java


214

Primitive tipi di dati - Oracle doc dice la gamma di longin Java è -9,223,372,036,854,775,808a 9,223,372,036,854,775,807. Ma quando faccio qualcosa del genere nella mia eclissi

long i = 12345678910;

mi mostra " The literal 12345678910 of type int is out of range" errore.

Ci sono 2 domande

1) Come posso inizializzare il longcon il valore 12345678910?

2) Tutti i valori numerici sono letteralmente predefiniti int?


E che ne dite di inizializzare un Long?
Wolfgang Fahl,

1
@WolfgangFahl Stesse regole per Long- a causa del boxing automatico, è possibile utilizzare Long i = 12345678910Lo utilizzare Long i = Long.valueOf(12345678910L)per quei casi in cui non è possibile utilizzare il boxing automatico.
Dorian Gray

Risposte:


423
  1. Si dovrebbe aggiungere L: long i = 12345678910L;.
  2. Sì.

A proposito: non deve essere una L maiuscola, ma le lettere minuscole sono confuse con 1molte volte :).


3
Nel caso qualcuno si stesse chiedendo: lo stesso vale per hex, es.0x200000000L
user149408

@Victor Long.valueOf (long) restituisce un Long, non un primitivo long. La soluzione di MByD evita di fare affidamento sul boxing automatico.
gouessej,

@ user149408 Forse intendi 0x20000000L?
Plutone,

2
@Pluto 0x20000000Lfunzionerebbe ma può essere comunque rappresentato da int(un numero intero a 32 bit), quindi 0x20000000funzionerebbe altrettanto bene. 0x200000000Lrompe quel confine, rendendo Lnecessario il trailing .
user149408

59
  1. È necessario aggiungere il Lcarattere alla fine del numero per fare in modo che Java lo riconosca come lungo.

    long i = 12345678910L;
  2. Sì.

Vedere Tipi di dati primitivi che indicano "Un valore letterale intero è di tipo long se termina con la lettera L o l; altrimenti è di tipo int."


39

È necessario aggiungere maiuscole Lalla fine in questo modo

long i = 12345678910L;

Lo stesso vale per float con 3.0f

Che dovrebbe rispondere ad entrambe le tue domande


15

Per inizializzare a lungo è necessario aggiungere "L" alla fine.
Può essere maiuscolo o minuscolo.

Tutti i valori numerici sono predefiniti int. Anche quando si esegue qualsiasi operazione bytecon qualsiasi numero intero, byteviene prima promosso inte quindi vengono eseguite tutte le operazioni.

Prova questo

byte a = 1; // declare a byte
a = a*2; //  you will get error here

2Viene visualizzato un errore perché è predefinito int.
Quindi stai provando a moltiplicare bytecon int. Pertanto, il risultato viene convertito in caratteri a intcui non è possibile assegnarlo nuovamente byte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.