Switch条件不能放置long类型?

Switch(条件){}
这个条件位置为什么不能放long类型的语句?

简单的回答是因为语法的规定。
在实际编程中,极少有如此多的分支,以致需要使用Long类型。

这样的语法规定是语言设计者的折衷考虑,并不一定特别合理,语言规范也在不停演变。
但截止目前的版本,Java的Swithch分支仍然不支持Long,在这种情况下,可以采取一些办法:

1 转为int类型,范例如下:

      final long value = System.currentTimeMillis() % 5;
      switch ( (new Long(value)).intValue() ) //注意这行
      {
         case 1 : System.err.println("One");
                  break;
         case 2 : System.err.println("Two");
                  break;

2 放弃switch,改用 if/else 的写法。
3 放弃switch,改用 Map。

补充:语言的底层实现细节有时还真不完全清楚,Java新版本中Switch添加了对String的支持,如果要支持Long,也没问题。
谁知道他们是怎么想的^_^,作为语言的使用者,遵守规则即可。

如果对您有帮助,请采纳答案好吗,谢谢!

java的Switch中条件只能包含以下几种类型,其中String必须在java 1.7之后的版本中才可以.

没有支持Long,估计是一般Integer就足够了.

 int ,char,byte,String

Java语法的标准规定的。Long型的占得数据位数太大了。不过在JDK7.0的标准,switch可以使用string类型了。

这个很基础的,Java语法的标准规定的。Long型的占得数据位数太大了.其实在实践中,swich这种语法都少用,某些设计模式可以代替。

Objects, literals, and constants of type char and short int

Enumeration types

int bit fields

Enumerators

不可以的,long 类型占位过大,在switch(expression)中,expression只能是一个整数表达式或者枚举常量,整数表达式可以是int类型或Integer包装类型。由于,byte,short,char都可以隐式转换为int类型,所以,这些类型也可以用作表达式。在JDK 1.7 (包括)后 可以使用string

byte char short int
java1.7加入String 枚举

在Switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型也可以。显然,long 不符合switch语法规定,并不能被隐式转换成int类型,所以,他不能作用于switch语句中。

要想在switch中使用long型,说你不定jdk12,13会有也不一定

4个几本数据整型中,除了long,其他3个都可以

因为long可以转换成Integer啊,语法上没必要有long类型咯,就像人民币只有1 2 5 组成