Le langage Java reconnaît plusieurs types de données permettant de différencier les informations utilisées par un programme.

En premier lieu, les types de données sont classées selon deux catégories distinctes :

  • les types primitifs ou de base,
  • les types composites ou de référence.

Les types de données primitifs regroupent les valeurs numériques entières ou décimales, les caractères simples et Unicode ainsi que les booléens true et false.

Type Intervalle Description
byte -27 - 27-1
(-128 - 127)
représente un type de données de nombres entiers binaires 8 bits.
short -215 - 215-1
(-32768 - 32767)
représente un type de données de nombres entiers courts sur 16 bits.
int -231 - 231-1
(-2147483648 -
2147483647
représente un type de données de nombres entiers sur 32 bits.
long -263 - 263-1
(-9223372036854775808 -
9223372036854775807)
représente un type de données de nombres entiers longs sur 64 bits.
float -3.4*1038
- +3.4*1038
représente un type de données de nombres à virgule flottante sur 32 bits.
double -1.8*10308
- +3.4*10308
représente un type de données de nombres à virgule flottante double sur 64 bits.
char '\u0000' - '\uFFFF'
soit de 0 à 65535
représente un type de données de caractères Unicode sur 16 bits.
boolean true OU false représente un type de données booléen sur 1 bit.
null null représente un type de données spécial.

Les types de données composites sont des structures composées de plusieurs informations de types primitifs ou composites comme les classes, les tableaux et les chaînes de caractères provenant plus exactement de la classe String.

La conversion des types de données permet de modifier le type initial d'une valeur en un autre en respectant toutefois certaines contraintes. Par exemple, il n'est pas possible de convertir une valeur en type booléen, un objet en un objet de classe sans corrélation. De même, si le transtypage d'un nombre en un type supérieur est permis comme un entier court en un type long, l'inverse comme un nombre décimal simple en un entier long, peut produire des erreurs et donc Java tentera d'empêcher ce type de conversion.

byte -> short -> int -> long -> float -> double

La conversion de type de données de la gauche vers la droite (le sens de l'élargissement) s'effectue automatiquement, tandis que dans le sens inverse (ou sens de la restriction), il est nécessaire de passer par un transtypage explicite.

// transtypage explicite
int x = 10;
int y = 3;

valeur = x / y; // retourne 3

valeur = (float)x / y // retourne 3.33...

// transtypage automatique
float x = 10;
int y = 3;

valeur = x / y // retourne 3.33...

Il est également possible de placer des caractères spéciaux (l, f, et d) immédiatement après le littéral numérique afin d'effectuer une opération de transtypage.

// Conversion d'un valeur numérique en type long
long a = 199999999999999999L;

// Conversion d'un valeur numérique en type float
float b = 3.0F;

float x = b + 24F;

// Conversion d'un valeur numérique en type double
double c = 15D;

double y = c / x * 12D;

Dans le langage Java, tous les littéraux entiers sont de type int. De la même façon, tous les littéraux à virgule flottante sont de type double.