Java中的“switch”语句是不是仅适用于整数? [复制]

Posted

技术标签:

【中文标题】Java中的“switch”语句是不是仅适用于整数? [复制]【英文标题】:Does the "switch" statement in Java only work with integers? [duplicate]Java中的“switch”语句是否仅适用于整数? [复制] 【发布时间】:2011-07-09 02:13:50 【问题描述】:

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

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

我不能写这样的东西吗?

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

谢谢

【问题讨论】:

直到 Java 7 才看到:blogs.sun.com/darcy/entry/project_coin_developer_preview 这里:cr.openjdk.java.net/~darcy/ProjectCoin/… 可以看出每个人都非常喜欢 Java 7 :) 我会用大写字母说。为什么这个问题已经结束了?另一个问题是在 2008 提出的,而我们现在是在 2011。这就像计算机时代的 50 年,Java 经历了一些重大的不确定性。 【参考方案1】:

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

“不要屏住呼吸”

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

虽然在查看了另一个答案中发布的即将发布的文档之后,我想这个功能在 JDK7 中可用。

【讨论】:

【参考方案2】:

此答案仅适用于 Java 6 或更早版本!在 Java 7 中添加了打开字符串

14.11 The switch Statement

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

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

【讨论】:

switch 确实适用于 Java SE 7 中的字符串 @Samit G 如果你问我这不是一个好主意,但它仍然只是 Java SE 7。【参考方案3】:

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

【讨论】:

本文档适用于 JDK7 这将作为 Java 7 中的一个新特性引入。本教程带有警告,它正在更新,可能不再反映 Java 6 特性。在 Java 6 中,switch 语句中的 String 尚不可用。我以为它也被取消了 7,但显然不是这样。高兴!【参考方案4】:

是的。直到 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

【讨论】:

【参考方案5】:

在 java 7 中,您可以将 switch 与字符串一起使用。看here

【讨论】:

【参考方案6】:

实际上,根据 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);
    

【讨论】:

以上是关于Java中的“switch”语句是不是仅适用于整数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

switch 语句是不是适用于工厂方法? C#

在java中的switch语句中使用整数变量[duplicate]

Java中没有switch语句的工厂

Java控制语句——分支循环跳转

switch语句能否作用在byte,long,string上

UIScrollView 是不是仅适用于嵌入在导航控件中的视图控制器?