# Java/Variables et types

Sur les autres projets Wikimedia :
La base de tout programme est la manipulation de données et d'ailleurs tous les programmes ne sont que ça ! C’est pourquoi il faut savoir quels sont les types de données de base que l’on peut utiliser dans le langage Java mais aussi comment créer des données que l’on appelle variable.

## Les types de base

Les types de donnée de base en Java sont :
* boolean : un booléen (d'ordre 2 en réalité) qui ne pourra prendre que les valeurs true ou false.
* byte : un entier relatif très court (entre −128 et 127).
* short : un entier relatif court (entre −32 768 et 32 767).
* int : un entier relatif (entre −2 147 483 648 et 2 147 483 647).
* long : un entier relatif long (entre −9 223 372 036 854 776 000 et 9 223 372 036 854 776 000).
* float : un nombre décimal (entre $-3,4.10^{38}$ et $3,4.10^{38}$).
* double : un nombre décimal à double précision (entre $-1,7.10^{308}$ et $1,7.10^{308}$).
* char : un caractère (entre '\u0000' et '\uffff').
* String : une chaine de caractère. NB : ce n'est pas un type primitif mais une classe.
| Type primitif | Taille en octets | Valeur par défaut | Représentation | Information complémentaire |
| boolean | Non spécifié | false | true / false | La taille dépend de la JVM |
| char | 2 | '\u0000' | Entre '\u0000' et '\uffff' | Caractère unicode |
| byte | 1 | 0 | $[-2^{7};2^{7}-1]$ |
| short | 2 | 0 | $[-2^{15};2^{15}-1]$ |
| int | 4 | 0 | $[-2^{31};2^{31}-1]$ |
| long | 8 | 0L | $[-2^{63};2^{63}-1]$ |
| float | 4 | 0f | Entre $-3,4.10^{38}$ et $3,4.10^{38}$ | Précision $1,4.10^{-45}$ |
| double | 8 | 0d | Entre $-1,7.10^{308}$ et $1,7.10^{308}$ | Précision $4,9.10^{-324}$ |
Des conversions existent entre ces différents types de données. En effet, il est possible de convertir un float en double, ou encore un int en double. Il est aussi possible de convertir un caractère en entier et inversement. Le meilleur moyen de connaître les conversions possibles est encore de les essayer. Il est cependant inutile d'essayer de convertir un booléen en quoi que ce soit d'autre.
Remarque : dans la pratique, pour représenter des nombres, on utilise le plus souvent que les types int et double. Cela évite en général les problèmes de conversion. Remarque : les chaînes de caractères (String) ne sont pas un type de base en Java, mais sont bel et bien des objets. Le traitement de ce type d'objet en mémoire n’est pas le même que les autres objets.

## Déclarer une variable

La déclaration d'une variable se fait toujours de la même manière quel que soit le type de donnée utilisé (y compris les types qui ne sont pas de base mais cela sera vu dans le chapitre consacré aux objets).
Prenons donc un exemple de déclaration de variable :
On peut remarquer ici l'apparition des mots clés public et static, il n’est pas nécessaire de s'en préoccuper, leur signification sera vu dans le chapitre consacré aux objets. Ces termes ne sont d'ailleurs pas obligatoires mais on se contentera de les laisser tant que l’on ne connaît pas exactement leur signification.
Si l’on souhaite donner une valeur particulière à une variable de type char, il faut écrire le caractère entre ' '. Pour les chaînes de caractères, ou String, il faut écrire la chaîne entre " ".

## Déclarer une constante

Il arrive parfois que l’on ait besoin d’utiliser des constantes, notamment pour donner un nom explicite à un chiffre, qui sera donc plus simple à manipuler pour notre esprit. La déclaration de constante se fait donc de la manière suivante :
Le mot final indique qu'une fois une valeur donnée, cette variable ne pourra plus en changer.
Remarque : Il est important de garder cette convention de nommage des constantes !

## Conversion de type

En Java, il est possible de modifier le type des variables. Il existe deux manières de réaliser cette opération :
* une conversion implicite : la modification est réalisée automatiquement par le compilateur, si la conversion du type A vers le type B peut se faire sans perte quelle que soit la valeur du type A ;
* une conversion explicite via l'opérateur cast sous la forme (type_souhaité)variable est nécessaire. Par exemple

## Variables et classes

Les types de variables ne sont pas des classes, il est aisé de les confondre mais les conventions habituelles d'écritures permettent de les distinguer. Les types de variables sont toujours écrits en minuscules, par contre les classes ont en principe leur premier caractère en majuscule. Aussi lorsque vous rencontrez un Int, ce n’est pas un type de base mais bien une classe en effet les variables peuvent être encapsulées, et Java fournit pour tous les types de variables des classes d'encapsulage appelées wrappers (paquetages).
Ceci peut être utile dans certains cas pour bénéficier de certaines caractéristiques de la classe mère Object. Par exemple, la pose d'un verrou de synchronisation (instruction synchronized) ne peut se faire que sur un objet.