【发布时间】:2014-12-18 03:59:11
【问题描述】:
我有两个 java sn-ps 在 switch case 中使用常量:
final Integer s1=5;
int x=5;
switch(x){
case s1: **<== causes complilation error..**
System.out.println("hello");
}
下面的代码可以正常工作,因为s1 被视为常量,而上面的代码不起作用。
final int s1=5;
int x=5;
switch(x){
case s1: <=== ok s1 is constant
System.out.println("hello");
}
以上两种声明有什么区别?
【问题讨论】:
-
非常接近,但不完全重复:stackoverflow.com/questions/4401743/…(此处也适用答案)
-
我不明白问题是什么。好的,您已经看到其中一个有效,而另一个无效。你知道他们之间有什么区别。你到底在问什么?
-
@DavidWallace 我认为这是一个合理的问题。他在问为什么不能将 final Integer 视为 switch 语句中的常量表达式。我想答案是语言设计者可以很容易地完成这项工作,但它会使常量表达式的定义变得复杂,没有充分的理由。
-
@pbabcdefp 好的。所以这是一个“设计师为什么要这样做”的问题。我现在知道了。就个人而言,我不喜欢这样的问题,因为在大多数情况下,它们只能由 Java 的设计者来回答;而且我不确定他们是否真的在 Stack Overflow 上闲逛。但我同意,这里没有人可以回答这个问题并不能使它成为一个不合理的问题。我觉得两个人已经尝试过很有趣,而且毫无疑问还会有更多人尝试。
标签: java