Java LanguageTipi di dati primitivi


introduzione

Gli 8 tipi di dati primitivi byte , short , int , long , char , boolean , float e double sono i tipi che memorizzano la maggior parte dei dati numerici grezzi nei programmi Java.

Sintassi

  • int aInt = 8; // La parte di definizione (numero) di questa dichiarazione int è detta letterale.

  • int hexInt = 0x1a; // = 26; È possibile definire valori letterali con valori esadecimali preceduti da 0x .

  • int binInt = 0b11010; // = 26; È inoltre possibile definire valori letterali binari; prefisso con 0b .

  • long good Long = 10000000000L; // Per impostazione predefinita, i valori letterali interi sono di tipo int. Aggiungendo la L alla fine del letterale stai dicendo al compilatore che il letterale è lungo. Senza questo il compilatore genererebbe un errore "Numero intero troppo grande".

  • double aDouble = 3,14; // I letterali a virgola mobile sono di tipo double per impostazione predefinita.

  • float aFloat = 3.14F; // Per impostazione predefinita questo letterale sarebbe stato un double (e causato un errore "Tipi incompatibili"), ma aggiungendo una F diciamo al compilatore che è un float.

Osservazioni

Java ha 8 tipi di dati primitivi , vale a dire boolean , byte , short , char , int , long , float e double . (Tutti gli altri tipi sono tipi di riferimento, inclusi tutti i tipi di array e tipi / classi di oggetti incorporati che hanno un significato speciale nel linguaggio Java, ad esempio String , Class e Throwable e le relative sottoclassi.)

Il risultato di tutte le operazioni (addizione, sottrazione, moltiplicazione, ecc.) Su un tipo primitivo è almeno un int , quindi aggiungendo un short a un short produce un int , come aggiungere un byte a un byte o un char a un char . Se vuoi assegnare il risultato di quel ritorno ad un valore dello stesso tipo, devi lanciarlo. per esempio

byte a = 1;
byte b = 2;
byte c = (byte) (a + b);

La mancata esecuzione dell'operazione comporterà un errore di compilazione.

Ciò è dovuto alla seguente parte della Java Language Spec, §2.11.1 :

Un compilatore codifica carichi di valori letterali di tipi byte e short utilizzando le istruzioni Java Virtual Machine che firmano-estendono tali valori ai valori di tipo int al momento della compilazione o in fase di esecuzione. Carichi di valori letterali di tipi boolean e char sono codificati usando istruzioni che estendono a zero il valore letterale a un valore di tipo int al momento della compilazione o in fase di esecuzione. [..]. Quindi, la maggior parte delle operazioni sui valori di tipi reali boolean , byte , char e short vengono eseguite correttamente mediante istruzioni che operano su valori di tipo computazionale int .

La ragione di ciò è specificata anche in quella sezione:

Data la dimensione dell'opcode a byte singolo di Java Virtual Machine, i tipi di codifica in opcode mettono pressione sul design del set di istruzioni. Se ogni istruzione digitata supportava tutti i tipi di dati di runtime della Java Virtual Machine, ci sarebbero più istruzioni di quante potrebbero essere rappresentate in un byte . [...] È possibile utilizzare istruzioni separate per convertire tra tipi di dati non supportati e supportati, se necessario.

Tipi di dati primitivi Esempi correlati