В моем классе литья учитель научил нас интересному факту следующим образом.
class Casting {
public static void main(String args[]){
int i = 10;
byte b = i;
System.out.println(b);
}
}
Мы получили сообщение об ошибке
java:5: possible loss of precision
И затем мы изменили код следующим образом
class Casting1 {
public static void main(String args[]){
final int i = 10;
byte b = i;
System.out.println(10);
}
}
10
Мы получили правильный результат. По этой причине он сказал, что когда мы изменяем переменную final
, переменная хранится в наименьшем возможном типе данных. В этом случае был byte
. Это причина, по которой мы смогли применить это без использования ключевого слова cast.
Но когда мы используем такую перегрузку метода,
class A {
void m(int i){
System.out.println("int");
}
void m(byte b){
System.out.println("byte");
}
public static void main(String args[]){
A a1 = new A();
final int i = 10;
a1.m(i);
}
}
Я получаю вывод int
. Если конечные переменные хранятся в наименьшем возможном типе данных, это должно быть byte
. Поэтому я попробовал следующий код без перегрузки.
class A {
void m(byte b){
System.out.println("byte");
}
public static void main(String args[]){
A a1 = new A();
final int i = 10;
a1.m(i);
}
}
java:9: m(byte) in A cannot be applied to (int)
В чем причина этого? Есть ли какой-то момент, который я неправильно понял?