Bonjour à tous,

Je rencontre un problème avec des constantes finales après la compilation des sources en une seule étape :
Soit les deux classes A et B définies comme suit :

Fichier A.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public class A
{
    static final String S = "avant";
}
Fichier B.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public class B
{
    public static void main(String args[])
    {
        System.out.println(A.S);
    }
}
On compile tout ça et on exécute B :
javac A.java B.java
java B
Le résultat affiché sur la console est :
avant

On modifie A.java comme suit :
Fichier A.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public class A
{
    static final String S = "après";
}
On compile A.java qui est le seul modifié et on exécute B :
javac A.java
java B
Le résultat affiché sur la console est toujours :
avant
Alors qu’on pouvait s’attendre à obtenir
après
C'est franchement curieux...

Merci par avance !

[1] Testé avec les JDK Oracle 6/7/8