прилагая письмо (l, d, е) буквального только указать на компилятор, какой тип вы имеете в виду, чтобы быть буквальным. Если вы пишете литерал в исходном коде, по умолчанию он считается int или double.
Выполнение противоположного преобразования фактически преобразует существующее значение (например, double, возвращаемое Math.pow) в другой тип java.
Литье примитива может привести к усечению. Например, двойное литье в int или long будет потерять десятичную часть, преобразование большого длинного в int может привести к совершенно другому числу (если длина выше Integer.MAX_VALUE) и преобразование в короткий или байтовый то же самое с более сильными пределами.
Casting является гораздо более широким понятием, можно привести примеры и не только примитивы:
public void aMethod(Number n) {
Long l = (Long)n; // Obviously will throw exception if you don't call it with a long
}
Отливка может вызвать ClassCastException, если вы пытаетесь бросить экземпляр к чему-то это не так.
Это не происходит между примитивами, которые автоматически вытесняются jvm.
Например вызова:
aMethod(1);
сгенерирует исключение, даже если примитивно INT может быть преобразован в примитив долго, экземпляр Integer не может быть приведен к экземпляру Лонга, как много как экземпляр Человека нельзя бросить на Собака.