Правила повышения типа

В Java определено несколько правил повышения типа, применяемых к выражениям. Эти правила следующие: во-первых, тип всех значений byte, short и char повышается до int, как было описано в предыдущем разделе. Во-вторых, если один операнд имеет тип long, тип всего выражения повышается до long. Если один операнд имеет тип float, тип всего выражения повышается до float. Если любой из операндов имеет тип double, типом результата будет double.

Следующая программа демонстрирует повышение типа значения одного из операндов к типу второго в каждой операции с двумя операндами:

class Promote (
public static void main(String args[]) {
byte b = 42;
char с = ' a' ;
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
double result = (f * b) + (i / c) - (d * s) ;
System.out.println ((f * b) + " + " + (i / c) + " - " + (d * s) ) ;
System.out.println("result = " + result);
}
}

Давайте подробнее рассмотрим повышение типа, выполняемое в следующей строке программы:

double result = (f * b) + (i / с) - (d * s) ;

В первом промежуточном выражении, f*b, тип переменной b повышается до float, и типом результата вычисления этого промежуточного выражения также является float. В следующем промежуточном выражении i/c тип с повышается до int и результат вычисления этого выражения — int. Затем в выражении d*s тип значения s повышается до double, и все промежуточное выражение получает тип double. И, наконец, выполняются операции с этими тремя промежуточными значениями типов float, int и double. Результат сложения значений типов float и int имеет тип float. Затем тип значения разности результирующего значения типа float и последнего значения типа double повышается до double, который и становится окончательным типом результата выражения.