Difference between final variables and compile time constant
compile-time-constant, java
Solution
The problem is, that all `case:` statements must be ultimate at compile time. Your first statement is ultimate. `a` will for 100% be no other value than `5`.
final int a = 5;
However, this is not guaranteed for `b`. What if there would be an if-statement around `b`?
final int b;
if(something())
b=6;
else
b=5;
Problem
What is the difference between final variables and compile time constants? Consider the following code ``` final int a = 5; final int b; b=6; int x=0; switch(x) { case a: //no error case b: //compiler error } ``` What does this mean? When and how are final variables assigned a value? What happens at run time and what happens at compile time? Why should we give switch a compile time constant? What other structures of java demands a compile time constant?