前言

总体来说,可以认为switchcase只支持int类型

JDK1.5之前

仅支持4种:

  1. byte
  2. short
  3. char
  4. int

JDK1.5之后1.7之前

支持5种:

  1. byte(以及包装类)
  2. short(以及包装类)
  3. char(以及包装类)
  4. int(以及包装类)
  5. enum

对四个包装类的支持是因为java编译器在底层手动进行拆箱

对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值

JDK1.7之后

支持6种:

  1. byte(以及包装类)
  2. short(以及包装类)
  3. char(以及包装类)
  4. int(以及包装类)
  5. enum
  6. String

实际上String类型有一个hashCode算法,结果也是int类型

扩展

switch的所有逻辑都可以用if...else...来实现,那如何选择switchif...else呢?

  1. 判断的结果是常量的情况下可以选择switch也可以选择if...else...

    但如果条件是判断大小,比如

    if (a > b) {...}

    那这种情况,switch实现起来就很难,因为case的值是常量。这个时候用if...else...

  2. 如果分支特别多,建议用switch

    唯一好处是容易读懂,这样对于以后维护代码是有很大好处的,至少看代码不费劲,但是分至少,比如三四个,那就用if...else...好了