Если у вас есть окончательная ссылка на объект Java, вы все равно можете манипулировать им, но не можете изменить его ссылку. Например, этот код совершенно легален:
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());
}
}
Но вы не можете сказать:
l = new JLabel("Newest Text");
После первого присвоения л. Обратите внимание, что вы можете сделать это, хотя:
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());
}
}
Это может быть сделано, потому что когда l объявлено, оно не присваивается ничему, даже нуль. Таким образом, вы можете назначить что-то на это только один раз.
То же самое относится и к примитивам. Вы можете присвоить ему значение следующим образом:
class Test1 {
public static void main(String[] args) {
final int i;
i = 2;
}
}
Но теперь вы не можете манипулировать им дальше, поскольку единственное, что вы можете сделать для примитивных типов, - это присвоить им значения.