public class Cours1 {
  public static void main(String []arg) {
    int i;
    //    System.out.println(i); // interdit car la variable n'est pas initialisée
    i = 4; // i est utilisée comme l-value
    System.out.println(i+7); // i est utilisée comme r-value

    int []t; // Attention: t n'est pas un tableau! t est une référence vers un tableau unidimensionel d'entiers
    //    System.out.println(t); // interdit t non plus n'est pas initialisée
    t = new int[4]; // l'opération new fournit l'adresse en mémoire d'un objet contenant 4 entiers (consécutifs en mémoire) et d'un entier contenant la longueur du tableau
    System.out.println(t); // ici on n'affiche pas le tableau t (t n'est pas un tableau), on affiche le contenu de la variable référence t, c'est-à-dire l'adresse de l'objet référencé/pointé par t, donc l'adresse du tableau alloué par l'opération new
    System.out.println(t[0]); // ici on affiche le premier entier du tableau de l'objet référencé/pointé par t. Attention, le tableau a été initialisé à sa création, la valeur 0 est utilisée pour initialisé les valeurs des tableaux d'entiers à leur création
    t[0] = 11; // on modifie la valeur du premier entier du tableau de l'objet référencé par t
    t[1] = 111; // on modifie la valeur du second entier du tableau de l'objet référencé par t
    System.out.println(t[1]); // on affiche la valeur du second entier du tableau de l'objet référencé par t
    System.out.println(t.length); // on affiche la longueur du tableau de l'objet référencé par t

    t = new int[6]; // ici on modifie la valeur de t, c'est-à-dire que désormais t désigne/référence/pointe un autre objet contenant un autre tableau (chaque new créé un objet frais/neuf).
    System.out.println(t);
    System.out.println(t[1]);
    System.out.println(t.length);
  }
}