В то время как в отрасли мы все используем, как правило, смешиваем имена, но, вообще говоря, разница между «конечной переменной» и «константой» заключается в том, что «константа» известна во время компиляции, а конечная переменная - нет.
Взгляните на этот пример:
@Test
public void testMe() {
class A {
final String foo;
A(int i) {
foo = (i > 10) ? "foo" : "bar";
}
void print() {
System.out.println(foo);
}
}
A a1 = new A(20);
A a2 = new A(5);
a1.print();
a2.print();
}
Этот код компилирует и производит следующий вывод:
foo
bar
Так что технически это может быть вызвано как финальная переменная.
Даже если вы присваиваете значение немедленно:
final String foo2 = "foo2";
Технически возможно написать что-то вроде этого (я полностью согласен):
final String foo2 = SOME_VAR > 5 ? "foo2" : "bar2";