Java中的“switch”语句是否只适用于整数?

时间:2011-03-04 20:05:19

标签: java switch-statement

  

可能重复:
  Switch Statement With Strings in Java?

Java中的“switch”语句是否仅适用于整数?

我不能写这样的东西吗?

开关(字符串)   案例“你好”:......

感谢

6 个答案:

答案 0 :(得分:7)

此答案仅对Java 6或更早版本有效! Java 7中添加了打开字符串

14.11 The switch Statement

  

Expression的类型必须是char,byte,short,int,Character,Byte,Short,Integer或枚举类型(第8.9节),否则会发生编译时错误。

通常,当您需要打开字符串值时,您通常可以通过使用char(因为字符串只能是一个字符长)或枚举来解决此限制。在你的情况下,enum看起来更有可能。

答案 1 :(得分:2)

是。直到java 6,不是用字符串。 您可以使用ENUMS进行解决方法,例如:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}

switch (day) {
        case MONDAY: System.out.println("Mondays are bad.");
                     break;

        case FRIDAY: System.out.println("Fridays are better.");
                     break;

        case SATURDAY:
        case SUNDAY: System.out.println("Weekends are best.");
                     break;

        default:     System.out.println("Midweek days are so-so.");
                     break;
    }

对我们人来说更容易阅读,对吗?

来源是http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

答案 2 :(得分:1)

实际上,根据Java SE 7中的Oracle,您可以使用带有switch语句的字符串

http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

public class StringSwitchDemo {

public static int getMonthNumber(String month) {

    int monthNumber = 0;

    if (month == null) { return monthNumber; }

    switch (month.toLowerCase()) {
        case "january":    monthNumber =  1; break;
        case "february":   monthNumber =  2; break;
        case "march":      monthNumber =  3; break;
        case "april":      monthNumber =  4; break;
        case "may":        monthNumber =  5; break;
        case "june":       monthNumber =  6; break;
        case "july":       monthNumber =  7; break;
        case "august":     monthNumber =  8; break;
        case "september":  monthNumber =  9; break;
        case "october":    monthNumber = 10; break;
        case "november":   monthNumber = 11; break;
        case "december":   monthNumber = 12; break;
        default:           monthNumber =  0; break;
    }

    return monthNumber;
}

public static void main(String[] args) {

    String month = "August";

    int returnedMonthNumber =
      StringSwitchDemo.getMonthNumber(month);

    if (returnedMonthNumber == 0) {
      System.out.println("Invalid month");
    } else {
      System.out.println(returnedMonthNumber);
    }
}

}

答案 3 :(得分:0)

switch语句不能用于字符串。在错误列表....

“不要屏住呼吸”

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=1223179

虽然在查看了另一个答案中发布的即将发布的文档后,我认为JDK7中提供了此功能。

答案 4 :(得分:0)

Java的教程说它适用于原始类型(byte,short,char,int)以及字符串。见http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

答案 5 :(得分:0)

使用java 7,您可以使用带字符串的开关。看here