2. Les types primitifs

Type de variable - définition


2.1.    Les types entiers

2.1.1      Les différents types d’entiers

Type

Taille

(octets)

Valeur minimale

Valeur maximale

byte

1

-128

127

short

2

-32 768

32 767

int

4

-2 147 483 648

2 147 483 647

long

8

-9 223 372 036 854 775 808

9 223 372 036 854 775 807

Tab. 2.1 Quatre types entiers de Java

2.1.2 Notation des constantes entières

Décimale usuelle, avec ou sans signe. Une constante entière est de l’un des types int ou long, suivant sa valeur. On peut forcer une constante à être du type long en faisant suivre sa valeur de la lettre l ou L, comme dans 36L (36 serait de type int).
25   -634   +12432  de type int
 3167894593     25L - de type long

hexadécimale
0x1f             valeur décimale 31 (1*16+15 )
0xA4           valeur décimale 164 (10*16+4)

octale
017             valeur décimale 15 (1*8+7)

binaire

0b00100001     valeur décimale 17 (1*16+1)

underscore" ( _ ) entre deux caractères numériques pour lisibilité

long ln = 0b11010010_01101001_10010100_10010010;


2.1.3      Déclaration des variables

public class TypeEntier {
      public static void main(String args[]){
            
byte bt;                                          //Entier byte non initialisé        
            
byte bt1 = 12;                              //Initialisation valeur décimale
             byte bt2 = 015, bt3 = 0xE;        //valeur octale et hexadecimale
            
short sh;
             short sh1 = 12, sh2 = -0145, sh3 = 0x1F2;
            
int en;      
            
int en1 = -12, en3 = 01450, en4 = -0x1A3F2;
            
long ln;
             long ln1 = 12, ln2 = 534L, ln3 = 01450L, ln4 = 0x1A3F2;
     
}
}


2.1.4      Représentation mémoire

2                 00000010                   02
3                 00000011                   03
-2               11111110                   FE
-3               11111101                   FD

public class Debord {
      public static void main(String args[]){
             byte bt = 127;
             bt++;
             System.out.println("bt = "+ bt);
     
}
}

2.2.    Les types flottants

2.2.1  Les différents types flottants et leur représentation en mémoire

Type

Taille en

octets

chiffres

significatifs

Valeur absolue minimale

Valeur absolue maximale

float

4

7

1.40239846E-45

3.40282347E38

double

8

15

4.9406564584124654E-324

1.797693134862316E308

Tab. 2.2 Deux types flottants de Java


 2.2.2    Notation des constantes flottantes

15.43         -0.28          -.28     4.

4.25E4            4.25e+4          42.5E3

54.27E-32            542.7E-33            5427e-34

48e13        48.e13       48.0E13

4.25E4f                 4.25E4F

2.2.3    Déclaration des variables flottantes

public class TypeFlottante {
    public static void main(String args[]){
        float ft;                                            //non initialisé   
        float ft1 = 12, ft2 = 12.1f, ft3 = 12.5E8F;        //avec initialisations
        double db;
        double db1 = 12, db2 = 12.1, db3 = 12.5E8;       
    }
}

Par défaut, toutes les constantes flottantes sont créées par le compilateur dans le type double.

2.3    Le type caractère

En Java les caractères sont représentés en mémoire sur deux octets en utilisant le code universel Unicode. Parmi les 65536 combinaisons qu’offre Unicode, on retrouve les 128 possibilités du code ASCII restreint (7 bits). Celles-ci s’obtiennent simplement en complétant le code ASCII par un premier octet nul. Cela signifie donc qu’en Java comme dans les autres langages, la notion de caractère dépasse celle de caractère imprimable.  Il y a des caractères associes à un graphisme et des caractères spéciaux.

2.3.1    Notation des constantes de type caractère

'a'       'E'       'é'        '+'

Notation

Unicode

(hexadécimal)

Abréviation usuelle

Signification

\b

0008

BS (Backspace)

Retour arrière

\t

0009

HT(Horizonta tabulation)

Tabulation horizontale

\n

000A

LF(Line feed)

Saut de ligne

\f

000C

FF(Form feed)

Saut de page

\r

000D

CR (Cariage return)

Retour chariot

\"

0022

 

guillemet

\'

0027

 

apostrophe

\\

005C

 

le caractère "\"

Tab 2.3 Les caractères disposant d’une notation spéciale

Normalement le programme source est saisi avec un éditeur local codant les caractères sur un octet. Avant la compilation les caractères sont convertis en unicode

Les constantes caractères ayant un code compris entre 0 et 255 peuvent être exprimées en octal sous la forme '\ooo', dans laquelle "ooo" représentent un nombre à trois chiffres en base 8 (0 à 7) :

en octale ( entre 0 et 255)

'\141'        le caractère 'a'             ( 1*(8*8) +4*8+1 = 64+32+1 = 97)
'\143'        le caract
ère 'c'

Java a prévu une notation permettant d’introduire directement dans la source un des 65536 caractères Unicode. Ainsi, n’importe où dans la source, vous pouvez utiliser la notation '\uxxxx' , dans laquelle xxxx représente 4 chiffres hexadécimaux :

'\u0061'        le caractère 'a'           (6*16+1 = 96+1 = 97)
'\u0063'        le caractère 'c'

Remarque:

Normalement le programme source est saisi avec un éditeur local codant les caractères sur un octet. Le jeu de caractères d’une implémentation donnée est donc très limité. La notation précédente permet l'introduction du code d’un caractère inconnu de l'éditeur. Si pendant l'exécution le programme affiche un tel caractère à l’écran, celui-ci sera à nouveau converti d’Unicode dans le codage local (sur un octet) de la machine d’exécution (qui n’est pas nécessairement celle où s’est faite la saisie). Si la conversion n’est pas possible, on obtiendra simplement l’affichage d’un point d’interrogation.

2.3.2    Déclaration des variables caractères

public class TypeChar {
    public static void main(String args[]){
        char c;
        char c1 = 'a', c2 = '\141', c3 = '\u0061';
        char c4 = '\"', c5 = '\n';
    }
}
2.4    Le type booléen

Le type "boolean" représente un bit qui a deux valeurs possibles : vrai ou faux. Un variable de ce type aura dons une de ces valeurs représentés en Java par les mots réservés

true     false

2.4.1    Déclaration des variables booléens

public class TypeBool {
    public static void main(String args[]){
        boolean bl;
        boolean bl1= true, bl2 = false;
    }
}

Les variables booléens  comme les autres types, peuvent être déclarées partout, à tout moment. La visibilité des variables est limitée au bloc d’instruction dans lequel elles sont déclarées et à tous les blocs qui sont inclus.

2.5    Variable non initialisées

En Java, une variable n’ayant pas encore reçu de valeur ne peut pas être utilisée, sous peine d’aboutir à une erreur de compilation. En voici deux exemples :

int n ;
System.out.println ("n = " + n ) ; // erreur de compilation

int n ;
int p = n+3 ; // erreur de compilation

Java est capable de détecter toutes les situations où il y a des risques des variables non initialisées.
int n ;
if (...) n = 30 ;
p = 2*n ; // erreur de compilation



2.6    Le mot-clé final

Java permet de déclarer que la valeur d’une variable ne doit pas être modifiée pendant l’exécution du programme. Avec la déclaration suivante on déclare la variable n de type int, avec la valeur initiale 20.

final int n = 20 ;
n = n + 5 ; // erreur : n a été déclarée final

D’une manière générale, le mot-clé final peut être utilisé quelle que soit l’expression d’initialisation de la variable

public class VarFinal {
    public static void main(String args[]){
        final int k =20;  //initialisation dans la declaration
        final  double d;
        d = Math.random();    //initialisation pendant l'exécution   
    }
}

Les deux expressions utilisées pour initialiser les variables k et d sont de nature différente. Dans le premier cas, il s’agit de la valeur 20, bien définie et connue dès la compilation. Dans le second cas, il s’agit d’une expression aléatoire dont la valeur, n'est connue qu’à l’exécution et peut différer d’une exécution à l’autre.
Le modificateur final ne fait pas la distinction. En fait, final demande simplement que la valeur d’une variable n’évolue plus après avoir été fixée.