Почему в операторе switch выполняются все случаи?

У меня есть этот код с оператором switch , который я получил из этого сообщения , и он работает абсолютно нормально:

String getOrdinal(final int day) {
    if (day >= 11 && day <= 13) {
        return "th";
    }
    switch (day % 10) {
        case 1: return "st";
        case 2: return "nd";
        case 3: return "rd";
        default: return "th";
    }
}

Но если я изменю его на что-то вроде следующего, он сломается, поскольку будут выполнены все случаи, кроме case 1 :

  static String getOrdinal(final int day) {
    StringBuilder ordinalBuilder = new StringBuilder();
    ordinalBuilder.append("");
    if (day >= 11 && day <= 13) {
        ordinalBuilder.append("th") ;
    }
    switch (day % 10) {
        case 1: ordinalBuilder.append("st");
        case 2: ordinalBuilder.append("nd");
        case 3: ordinalBuilder.append("rd");
        default: ordinalBuilder.append("th");
    }
    ordinalBuilder.append("");
   return ordinalBuilder.toString();
 }

Это напечатает 2 ndrdth sup> , когда я передаю 2 . Я попытался изменить построитель на буфер, но получил тот же ответ ... Может это ошибка или я ошибаюсь?

10
задан 0xCursor 1 August 2018 в 00:02
поделиться