W mojej klasie castingu nauczyciel nauczył nas interesującego faktu w następujący sposób.Ostateczna koncepcja odlewania nie dotyczy przeciążenia
class Casting {
public static void main(String args[]){
int i = 10;
byte b = i;
System.out.println(b);
}
}
Mamy błąd
java:5: possible loss of precision
A potem zmienił kod w następujący sposób
class Casting1 {
public static void main(String args[]){
final int i = 10;
byte b = i;
System.out.println(10);
}
}
10
Mamy poprawny wynik. Z tego powodu powiedział, że gdy zmienimy zmienną, zmienna jest przechowywana w najmniejszym możliwym typie danych. W tym przypadku był to byte
. Z tego powodu mogliśmy go przesyłać bez użycia słowa kluczowego "cast".
Ale kiedy używamy metody przeciążeniu takiego,
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);
}
}
uzyskać wyjście int
. Jeśli ostateczne zmienne są przechowywane w najniższym możliwym typie danych, powinno to być byte
. Więc próbowałem poniższy kod bez przeciążania.
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)
Jaki jest tego powód? Czy jest jakiś punkt, który źle zrozumiałem?
w przykładzie z końcem, przekazujesz stałą 10 do println prawdopodobnie powinno b. powinieneś sprawdzić czy ta literówka istnieje w twoim kodzie, może to zmieni wynik? –
pierwszy przykład daje mi błąd kompilacji: niezgodność typu: nie można konwertować z int na bajt, drugi przykład (z końcem) przechodzi kompilację –
@sharonbn Tak, tak powinno być. Wspomniałem, że dostaję błąd –