class Foo{
public static void main(String args[]){
final int x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Le compilateur Java comprend que la condition de l'instruction if est toujours vraie et donc que y sera toujours initialisé. Aucune erreur de compilation, comme prévu.
class Bar{
public static void main(String args[]){
final int x;
x=101;
int y;
if(x>100){
y=-1;
}
System.out.println(y);
}
}
Mais lorsque je sépare la déclaration et l'initialisation de x en deux lignes, le compilateur ne semble pas comprendre que la condition est toujours vraie et que y sera toujours initialisé.
final int x;
x=101;
byte b;
b=x;
System.out.println(b);
La même chose se produit ici et le compilateur donne une erreur de perte de précision.
final int x=101;
byte b;
b=x;
System.out.println(b);
Encore une fois, le compilateur peut comprendre que x est à l'intérieur de l'intervalle de b.