public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String s;
        Double d;
        short sh;
        Integer i;
        while (!(s = r.readLine()).equals("exit")){
           try {
            if (s.contains(".")) {
                d = Double.parseDouble(s);
                print(d);}

            else if (Short.parseShort(s)>0 && Short.parseShort(s)< 128){
                sh= Short.parseShort(s);
                print(sh);}

            else if (Integer.parseInt(s)<=0 || Integer.parseInt(s)>= 128){
                i= Integer.parseInt(s);
                print(i);}
               }
           catch (NumberFormatException e){
               print (s);
            }
            }
        }


    public static void print(Double value) {
        System.out.println("Это тип Double, значение " + value);
    }

    public static void print(String value) {
        System.out.println("Это тип String, значение " + value);
    }

    public static void print(short value) {
        System.out.println("Это тип short, значение " + value);
    }

    public static void print(Integer value) {
        System.out.println("Это тип Integer, значение " + value);
    }
}
Подскажите, почему если сначала в проверке стоить Short, то Integer будет не верно проходить проверку? Ведь если при проверке Short проверка выдала false, начинается проверка следующего else - if, а там должно быть true. Или "s" преобразовывается в Short, при проверке выдает false, и далее уже проверяется некорректное число (не то которое было введено)?