For built-in constants (strings, numbers), the compiler behaves differently, yes.
When the compiler sees a constant expression, it inserts the result of this constant expression into the code it uses, and does not evaluate it every time. So, if you have:
public static final int FOO = 10;
public static final int BAR = 5;
...
System.out.println(FOO * BAR);
then a constant value of 50 will be directly embedded in the code.
, - FOO BAR, , , ... "", -.