Ank*_*ava -2 java compile-time-constant
final int i=10;
final String s=new String("lkj");
Run Code Online (Sandbox Code Playgroud)
为什么第一个是编译时间常量但是第二个不是编译时间常量,即使final也与第二个一起使用?
因为JLS这样说:
常量表达式是表示基本类型值的表达式或不突然完成的字符串,仅使用以下内容组成:
- 原始类型的文字和String类型的文字(§3.10.1,§3.10.2,§3.10.3,§3.10.4,§3.10.5)
- 转换为基本类型并转换为String类型(第15.16节)
- 一元运算符+, - ,〜,和!(但不是++或 - )(§15.15.3,§15.15.4,§15.15.5,§15.15.6)
- 乘法运算符*,/和%(§15.17)
- 加法运算符+和 - (§15.18)
- [...其他情况]
但是没有一个案例说"通过调用String构造函数创建字符串,将字符串作为参数".
无论如何都没有理由调用那个构造函数(它应该被弃用,恕我直言).