Java Can Switch Strings, Too!

Posted by Grego on October 16, 2015

This is probably old news to most of you java devs but in case you didn’t know, as of Java 7 you can use the switch-case construct on a String as well. Evidently, it is more optimized than a regular if-then.

… The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements.

That means that now (haha I said, “now”) you can use:

String something = "whatever";

switch(something) {
    case "whatever":
        doSomeJunk();
        break;

    case "somethingElse":
        whatever();
        break;

    // ...
}

And it will actually out perform a standard if-then:

String something = "whatever";

if (something.equals("whatever")) {
    doSomeJunk();
}
else if (something.equals("somethingElse")) {
    whatever();
}
else if ( /* ... */ ) {
    // ...
}
else if ( /* ... */ ) {
    // ...
}
// ... and so on

Ain’t that great for our hands? Less typing!

Strings in switch statements from the Java 7 documentation provides us with a more practical example:

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}