Si vous avez une référence finale à un objet Java, vous pouvez toujours le manipuler mais vous ne pouvez pas modifier sa référence. Par exemple, ce code est parfaitement légal :
import javax.swing.JLabel;
class Test1 {
private final static JLabel l = new JLabel("Old text");
public static void main(String[] args) {
System.err.println(l.getText());
l.setText("New Text");
System.err.println(l.getText());
}
}
Mais vous ne pouvez pas dire :
l = new JLabel("Newest Text");
Après la première affectation à l. Notez que vous pouvez cependant le faire :
import javax.swing.JLabel;
class Test1 {
public static void main(String[] args) {
final JLabel l;
String s = getArbitaryString(); // Assume this method returns a string
l = new JLabel(s);
System.err.println(l.getText());
}
}
Cela peut être fait parce que lorsque l est déclaré, il n'est pas assigné à quoi que ce soit, même pas à null. Vous n'êtes donc autorisé à lui attribuer quelque chose qu'une seule fois.
Il en va de même pour les primitives. Vous pouvez leur attribuer une valeur comme ceci :
class Test1 {
public static void main(String[] args) {
final int i;
i = 2;
}
}
Mais maintenant, vous ne pouvez plus le manipuler puisque la seule chose que vous pouvez faire avec les types primitifs est de leur attribuer des valeurs.