Преобразование 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);