Java перегружает int в long - PullRequest
0 голосов
/ 23 декабря 2018

Ссылаясь на Перегрузка Java - long и float , в которой упоминаются правила в JLS # 15

Следующие правила определяют прямое отношение супертипа среди примитивных типов:

double> 1 float

float> 1 long

long> 1 int

int> 1 символ

int> 1 short

short> 1 байт

, где "S> 1 T" означает "T является прямым подтипом S", в соответствии с JLS # 4.10 непосредственно над этим разделом.

Почему следующий код печатается с плавающей точкой?

int q = 2;
a(q);

void b(long a) {
        System.out.println("long");
}

void a(float a) {
        System.out.println("float");
}

1 Ответ

0 голосов
/ 23 декабря 2018

Существует только 1 метод с именем a, который принимает параметр с плавающей запятой,

Отношение поддержки Java ( прямое отношение супертипа ) от float до int (используется long вв середине):

float> long -> int

Если вы переименуете метод b в a, вы будете выполнять метод с long как выожидается

void a(long a) {
        System.out.println("long");
}
...