Если два значения имеют разные типы данных, Java будет автоматически повышать одно из значений до большего из двух типов данных? - PullRequest
3 голосов
/ 16 февраля 2020

Правило гласит, что если два значения имеют разные типы данных, Java автоматически переведет одно из значений к большему из двух типов данных?

В приведенном ниже коде значение, присвоенное y больше, чем значение х. Поэтому, принимая во внимание правило, напечатанное значение должно быть «Float», но вместо него должно быть напечатано «Double.

Ответы [ 3 ]

1 голос
/ 16 февраля 2020

«Больше» не относится к значению «>», но (в двух словах) к типу данных, который может содержать больше информации, например, Double предпочтительнее Float, а Long предпочтительнее Int.

Это задокументировано здесь: https://docs.oracle.com/javase/specs/jls/se13/html/jls-5.html#jls -5.6.2

1 голос
/ 16 февраля 2020

Вы неправильно поняли, что означает «больше» во фразе «больший из двух типов данных». Если бы он сказал «большее из двух значений », то ваше понимание было бы правильным.

Большой тип данных - это такой, который занимает больше памяти , double занимает 64 бита, а float - 32 бита, поэтому double является более крупным типом данных.

Обратите внимание, что это поведение (двоичное число c повышение) относится только к Числа c типов и не могут быть действительно описаны с помощью одного единственного правила, такого как «Если два значения имеют разные типы данных, Java автоматически переведет одно из значений в больший из двух типов данных». Например, short раз byte дает вам int. Это полностью указано в Java Спецификации языка.

Для получения дополнительной информации см. раздел 5.6.2 в Java Спецификации языка .

1 голос
/ 16 февраля 2020

Значения переменных не имеют значения. Их типы имеют значение. double - это 8-байтовые типы, а float - это 4-байтовые типы. Следовательно, чтобы умножить double и float, вы переводите переменную меньшего типа (float) в больший тип (double).

Если вы умножаете Double с Float они будут распакованы на double и float. Чтобы умножить double на float, float будет повышен до double, и произойдет умножение double.

Поскольку результат сохраняется в Object, результат double будет помещен в Double.

...