除了將byt型和short型提升到int型以外,java定義了若干適用于表達式的類型提升規則(type promotion rules)。 首先,如剛才描述的,所有的byte型和short型的值被提升到int型。其次,如果一個操作數是long型,整個表達式將被提升到long型;如果一個操作數是float型,整個表達式將被提升到float型;如果有一個操作數是double型,計算結果就是double型。下面的程序表明:在表達式中的每個值是如何被提升以匹配各自二進制運算符的第二個參數:
class Promote {
public static void main(String[] args) {
byte b = 42;
char c = ‘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 / c) - (d * s);
在第一個表達式f*b中,變量b被提升為float類型,該子表達式的結果當然是float類型。接下來,在子表達式i/c中,邊量c被提升為int類型,該子表達式的結果當然是int類型。然后,子表達式d*s中的變量s被提升為double類型,該子表達式的結果當然是double類型。最后,考慮三個中間值,float類型,int類型,和double類型.float類型加int類型的結果是float類型,然后float類型減去提升為double類型的double類型,該表達式的最后結果是double類型。