Assignment problems
We consider:
Code | Result |
---|---|
|
Compiles flawlessly. |
|
Compile time Error:
Incompatible types.
Required: byte
Found: int |
Give an explanation: Why does the first snippet compiles flawlessly but the second second causes a compile time error ?
Solution
The final
modifier prohibits
subsequent assignments to our variable i
.
The compiler can thus safely assume its value to remain constant. The
int value of 33
fits nicely into a byte
variable ranging from -128 to 127. With
respect just to the variable b
the first
code snippet is equivalent to:
byte b = 33; // int to byte narrowing by compile time range check
Without the final
modifier in general
a more complex compile time analysis would be required. (Standard) Java™ compilers do not implement this. Albeit no
statement being present between the two lines the compiler cannot assume
the variable i
's value to remain unchanged
thus possibly receiving a value outside [-128, 127];