原文:
Compile time constant must be:
- declared final
- primitive or String
- initialized within declaration
- initialized with constant expression
So private final int x = getX();
is not constant.
To the second question private int y = 10;
is not constant (non-final in this case), so optimizer cannot be sure that the value would not change in the future. So it cannot optimize it as good as constant value. The answer is: No, it is not treated the same way as compile time constant.