Сценарий, который вы описали, происходит для преобразования типов в Java. Официальный java doc уже предоставил 13 категорий конверсий, которые возможны в java. Ваш также падает на одного из них, widening primitive
.
Вы можете легко понять логику, если понимаете этот простой код:
int a = 12.80;
System.out.print(a);
12.80
не является целочисленным типом данных, и если 12.80 необходимо преобразовать в целое число, то компилятор должен вырезать оттуда .80
, что приведет к possible lossy conversion
ошибке компиляции.
Опять же, мы можем захотеть запустить другой код:
double b = 12;
System.out.print(b);
Если вы считаете, что приведенный выше код может выдать вам ошибку компиляции, то вы совершенно не правы. Потому что здесь вывод 12.0
. Поскольку здесь не происходит потеря данных, int
можно легко преобразовать в double
.
Итак, теперь вы должны понимать, что не все типы данных могут быть преобразованы в другой. Вы можете обратиться к официальной ссылке на документацию по Java, приведенной выше, чтобы узнать обо всех типах конверсий.
Теперь, в вашем случае, 100
считается компилятором как 100.0
или что-то в этом роде, поскольку нет другого перегруженного метода с целочисленным типом данных.
Надеюсь, теперь вы понимаете.