【发布时间】:2017-06-24 07:53:45
【问题描述】:
final int i=10;
final String s=new String("lkj");
为什么第一个是编译时间常数,但第二个不是编译时间常数,即使 final 也与第二个一起使用?
【问题讨论】:
-
因为在这种情况下字符串变量存储的是引用而不是值(参见“new”关键字)。所以每次运行程序时,引用值都是不同的。
-
JB Nizet 5,这是一个完美的答案,而不仅仅是评论。
-
@RoundSauce3 不,这不是原因。如果你使用
final String s = "ljk",那么s是一个常量表达式,尽管它也是一个字符串对象的引用。 -
所以我猜答案是“因为他们喜欢它”。 :P
标签: java compile-time-constant