Domanda

Mi rendo conto che il seguente codice non funziona

Float a=3

perché la sua tradotto come float a = Integer.valueOf (3). Avremo un riferimento galleggiante sul lato sinistro e un oggetto Integer sul RHS, che è incompatibile. Ma:

1.

     `Short a=3;`

Questo funziona, anche se qui ancora una volta, avremo un riferimento breve sul lato sinistro e un oggetto Integer sul RHS.

2.

Float a=(Float) 3

Se non avessimo typecasted 3, sarebbe stato tradotto come Integer.valueOf (3). Ora, sarà tradotto come Float.valueOf (3)?

È stato utile?

Soluzione

Se si tenta di inizializzare una variabile con un valore più grande di quanto può contenere (a prescindere dalla forma numerica del valore), il compilatore vi darà un messaggio di errore.

char c = 0xffff; // max char hex value
byte b = 0x7f; // max byte hex value
short s = 0x7fff; // max short hex value

Si noti nel codice sopra i valori massimi esadecimali possibili per char, byte, e breve. Se si superano questi, il compilatore automaticamente rendere il valore int e dirvi che avete bisogno di un cast restringimento per l'assegnazione. Saprete hai fatto un passo oltre la linea.

Quindi nel tuo caso Short s = 3 diventa realtà Short s = new Short(3) e lavora. (Metodi valueOf non vengono utilizzati quando Autoboxing per questo IDE moderni hanno opzioni di bandiera questi autoboxing come errori e li si può sostituire con il metodo valueOf per una migliore Gestione della memoria)

Nel secondo caso Float a=(Float) 3 diventerà Float.valueOf(3)

Altri suggerimenti

Se la tua domanda è: "Perché Float f = 3; non si compila, ma breve s = 3; lo fa?", Allora la risposta è:

il compilatore Java fa un lavoro speciale sul costanti intere per inserirle con il lato sinistro: trova il tipo e l'utilizza più adatto. Così,

Short s = 3;

è compilato per

Short s = Short.valueOf(3);

In sostanza, la stessa magia che accade quando si scrive

short s = 3;

Ma questo è fatto solo per gli interi, e non per i valori in virgola mobile.

La forma breve è:

Float a=3.0f;

Per doppio Tipo:

Double b=3.0;

Non v'è alcun modo per specificare le costanti brevi e dei byte, in modo che il compilatore permette di tradurre int costanti in modo trasparente. Ci sono costanti galleggiare in java in modo che non supporta traduzioni implicita. Se si desidera un galleggiante / galleggiante vi suggerisco di utilizzare una costante galleggiante.

Byte b = 3;
Short s = 3;
Integer i = 3;
Long l = 3L;
Float f = 3f;
Double d = 3d;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top