当需要时Java的数据类型可以自动提升为比它“大”的类型,对原始类新来说,byte首先自动提升为int,然后是long、float或double。byt、short提升顺序为short、int、long、float、double。对于对象来说,会自动提升为父类的类型。
整型运算的结果Java默认为int型,浮点型运算的结果Java默认为double型,因此在运算时可能会出现从范围大的类型直接赋值给小的类型,从而导致编译器错误:possible loss of precision。
如下代码:
public class Promotion {
public static void main(String[] args) {
char c1 = 'a';
char c2 = 'b';
char c3;
c3 = c1 + c2; //compiler error,c1+c2以自动提升为int型
}
}
编译时出现错误:
如下代码:
public class Promotion2 {
public static void main(String[] args) {
short s = 100;
// s = s >>> 2; //compier error, possible loss of precision
s >>>= 2; //OK
}
}
>>> 与 >> 的区别为>>>右移时高位总是补0。