Em uma instrução switch, por que todos os casos estão sendo executado

Eu tenho esse código com oswitch declaração que recebi desteposta e funciona absolutamente bem:

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";
    }
}

Mas se eu mudar para algo como o seguinte, ele quebra, como todos os casos além decase 1 é executado:

  static String getOrdinal(final int day) {
    StringBuilder ordinalBuilder = new StringBuilder();
    ordinalBuilder.append("<sup>");
    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("</sup>");
   return ordinalBuilder.toString();
 }

This prints2<sup>ndrdth</sup> quando eu passo2. Tentei alterar o construtor para o buffer, mas obtive a mesma resposta ... Isso pode ser um bug ou estou cometendo algum erro?

questionAnswers(5)

yourAnswerToTheQuestion