Выдержка из пособия по 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);
}
}
В пособии имеется ввиду что-то другое? Приведите, пожалуйста, пример несовпадения типов.
Скорее всего имеется ввиду ситуация с выполнением присваивания;
Данный фрагмент кода скомпилируется в 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 и т. п.
Рекомендую - Шилдт Г. - Java 8. Полное руководство - 2015. Там очень хорошо все об этом описано. По поводу вашего примера добавьте - String str="string"; h = yxf+str; и увидите что получится.
Продвижение своими сайтами как стратегия роста и независимости