Автоматическое приведение типов

167
21 декабря 2019, 04:20

Выдержка из пособия по Java:

В Java, в отличие от некоторых других языков, отсутствует автоматическое приведение типов. Несовпадение типов приводит не к предупреждению при трансляции, а к сообщению об ошибке. Для каждого типа строго определены наборы допустимых значений и разрешенных операций.

Однако практический пример работает (производится вычисление между операндами разного типа):

public class MyClass {
    public static void main(String args[]) {
        int y = 54;
        double x = 1.543E4;
        char f = '2';
        double h = y*x*f;
        System.out.println(h);
    }
}

В пособии имеется ввиду что-то другое? Приведите, пожалуйста, пример несовпадения типов.

Answer 1

Скорее всего имеется ввиду ситуация с выполнением присваивания;

Данный фрагмент кода скомпилируется в C, но приведёт к ошибке компиляции в Java:

double a = 3.2;
int b = a;

UPD:

В Java есть приведение примитивов по следующей цепочке:

byte –> short -> int –> long –> float –> double

т.е. когда у вас есть int a = 1; long b = 2; то результат арифметической операции a*b будет long.

Это связано с определением чисел, например в byte всего 1 байт которое может содержать число от -127 до 128, в int попадает весь диапазон чисел byte, потому что там 4 байта, float и double могут содержать числа в экспоненциальной форме, так что они могут представлять long и т. п.

Answer 2

Рекомендую - Шилдт Г. - Java 8. Полное руководство - 2015. Там очень хорошо все об этом описано. По поводу вашего примера добавьте - String str="string"; h = yxf+str; и увидите что получится.

READ ALSO
Рефакторинг интеерпретатора brainfuck (clean code)

Рефакторинг интеерпретатора brainfuck (clean code)

У меня есть относительно чистый код интерпретатора brainFuck на java, могли бы вы дать несколько советов по его улучшению в плане чистоты кода, и, если...

112
Не удалаяется файл БД при удалении приложения (Android)

Не удалаяется файл БД при удалении приложения (Android)

Работаю с готовой БДПри запуске приложения копирую из Assets в каталог БД приложения по пути:

143
Полиморфизм в Java и перегрузка

Полиморфизм в Java и перегрузка

Относиться ли перегрузка метода к полиморфизму в языке Java? Как я знаю только переопределение метода относиться к полиморфизму в языке Java, а перегрузка...

217
Как закрыть все поля Toast при закрытии приложения?

Как закрыть все поля Toast при закрытии приложения?

У меня в приложении при определённых обстоятельствах вылезает поле toast с подсказкамиДопустим, поле toast ещё отображается, а приложение закрыли...

132