Domanda

Sembra che quando si digita un numero in Java, il compilatore legge automaticamente come un intero, che è il motivo per cui quando si digita (lungo) 6000000000 (non nel campo del numero intero) si lamentano del fatto che 6000000000 non è un intero . Per correggere questo, ho dovuto specificare 6000000000L. Ho appena imparato a conoscere questa specifica.

Ci sono altre specifiche numero come in breve, byte, float, double? Sembra che questi sarebbe bene avere, perché (presumo) se si potesse specificare il numero che si sta digitando è un breve, allora Java non avrebbe dovuto lanciarlo - che è un assunto, mi corregga se sbaglio . Io normalmente cercare questa domanda me, ma non so che cosa questo tipo di specifica numero è anche chiamato.

È stato utile?

Soluzione

Ci sono suffissi specifici per long (ad esempio 39832L), float (ad esempio 2.4f) e double (ad esempio -7.832d).

Se non c'è suffisso, ed è un tipo intero (ad esempio 5623), si presume essere un int. Se non è un tipo intero (ad esempio 3.14159), si presume che sia un double.

In tutti gli altri casi (byte, short, char), è necessario il cast in quanto non v'è alcun suffisso specifico.

La specifica Java consente suffissi caso sia superiori che inferiori, ma è preferita la versione maiuscolo longs, secondo il caso L superiore è meno facile confondere con un 1 numerico rispetto al caso l inferiore.

Vedere la sezione JLS 3.10 per i dettagli scabrosi (si veda la definizione di IntegerTypeSuffix).

Altri suggerimenti

Spero che non vi dispiacerà un lieve tangente, ma il pensiero si può essere interessati a sapere che oltre F (per float), D (per il doppio), e L (per lungo tempo), una proposta è stata fatta aggiungere suffissi per byte e short-Y e S rispettivamente. Questo eliminerebbe la necessità di cast byte quando si utilizza la sintassi letterale per byte (o breve) array. Citando l'esempio dalla proposta:

  

BENEFIT MAJOR: Perché è la piattaforma   meglio se viene adottata la proposta?

     

Codice cruddy come

 byte[] stuff = { 0x00, 0x7F, (byte)0x80,  (byte)0xFF};
     

può essere ricodificato come

 byte[] ufum7 = { 0x00y, 0x7Fy, 0x80y, 0xFFy };

Joe Darcy sta supervisionando progetto Coin per Java 7, e suo blog è stato un modo semplice per tenere traccia di queste proposte.

Queste sono letterali e sono descritti in sezione 3.10 della specifica linguaggio Java.

Per default qualsiasi tipo integrale primitivo dati (byte, short, int, long) sarà trattata come int tipo per compilatore java. Per byte e breve , fino a quando il valore assegnato a loro è nella loro gamma, non c'è nessun problema e nessun suffisso richiesto. Se il valore assegnato a byte e breve supera la loro gamma, è richiesta esplicita del tipo di fusione.

Esempio:

byte b = 130; // CE: range is exceeding.

per ovviare a questo tipo di eseguire casting.

byte b = (byte)130; //valid, but chances of losing data is there.

In caso di lunga tipo di dati, è possibile accettare il valore intero senza alcun problema. Supponiamo di assegnare come

Long l = 2147483647; //which is max value of int

in questo caso non è richiesta alcuna suffisso come L / l. Di valore predefinito 2147483647 è considerato da compilatore Java è di tipo int. casting di tipo interno è fatto da compilatore e int è auto promosso tipo lungo.

Long l = 2147483648; //CE: value is treated as int but out of range 

Qui abbiamo bisogno di mettere il suffisso come L per trattare il letterale 2147483648 tipo finché dal compilatore Java.

così finalmente

Long l = 2147483648L;// works fine.
  

Sembra che questi sarebbe bene   avere, perché (presumo) se potessi   specificare il numero che si sta digitando è   una breve poi Java non avrebbe dovuto   lanciarlo

Poiché l'analisi di letterali avviene in fase di compilazione, questo è assolutamente irrilevante in termini di prestazioni. L'unica ragione per avere short e byte suffissi sarebbe bello è che si portano a codice più compatto.

Si consideri:

long l = -1 >>> 1;

vs

int a = -1;
long l = a >>> 1;

Ora che ci si aspetta preoccuparsi frammenti di codice per dare lo stesso valore alla l variabile. Quindi abbiamo bisogno di espressione sul letterali int da fare come ints.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top