Ces données primitives sont des valeurs , qui peuvent être affectées à une variable, passées en argument à une méthode ou retournées comme résultat d'une méthode. Elles n'ont pas besoin d'être créées et peuvent être représentées par une valeur littérale, par exemple pour donner une valeur initiale à une variable (figure 1.2) :
boolean test = false; char c = 'A'; int n = 23; double x = 3.14;
Il existe des relations de sous-typage entre certains des types primitifs : chacun des types byte, short, int, long, float, double est un sous-type des suivants et char est un sous-type de int. Ces relations permettent de convertir une valeur d'un type en une valeur d'un sur-type : une telle conversion peut se faire sans perte d'information dans certains cas (de byte en short, de short ou de char en int, de int en long, de float en double) ou avec perte d'information dans les autres cas, l'ordre de grandeur étant cependant préservé (par exemple, de int en float). Notons que le type boolean n'est dans une relation de sous-typage avec aucun autre type. Quand les opérandes d'une opération ne sont pas de même type (par exemple un int et un float), il y a conversion implicite de l'un d'eux dans le type de l'autre ; par exemple, int + float est converti en float + float. Cette conversion implicite se fait toujours de sous-type vers sur-type : de int vers float, de float vers double.