Преобразование int to short, Java

Необходимо вызвать метод print(short value) если (val > 0 && val < 128). Происходит вызов print(Integer value) игнорируя (short)val. В чём может быть проблема?

Ввод: 45

Вывод: Это тип Integer, значение 45

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String in = sc.next();
        while (!in.equals("exit")){
            try{
                int val = Integer.parseInt(in);
                print((val > 0 && val < 128)?(short)val:val);
            }catch (Exception e){
                System.out.println("Это не число");
            }
            in = sc.next();
        }
    }
    public static void print(short value) {
        System.out.println("Это тип short, значение " + value);
    }

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

Ответы (1 шт):

Автор решения: Igor

Проблема может быть в непонимании того, как работают тернарный оператор и выбор перегруженных функций.


Тернарный оператор возвращает более общий тип, если операнды имеют разные (но совместимые) типы.

Выбор перегруженной функции происходит на этапе компиляции.


if (val > 0 && val < 128)
  print((short)val);
else
  print(val);
→ Ссылка