当算术表达式包含多个基本数据类型时,整个算术表达式的数据类型会在数据运算时出现类型的自动提升 。
- 所有的 byte , short , char 会自动提升为int类型。
Double d1 = 123+ 1.1F + 99L + 3.14 ;
123 是 整数(int) ;
1.1F 是 浮点型(float);
9.9L 是 长整形(long);
3.14 是 浮点型(double)
从左到右运算:
1. 123 + 1.1F = 124.1F
Int +float = float
2. 124.1F + 99L = 223.1F
float + long = float
- 223.1F + 3.14 = 226.24
float +double = double ;
最终的结果是 226.24 , 是double类型的。所以整个表达式的结果和类型是: 226.24 和 double 。
样例一:
public class Hello
{
publicstatic void main(String[] args)
{
System.out.println('A'+1); //结果为:66 。
//因为char类型 直接被转换为 int 类型。
}
}
样例二:
1.
public class Hello
{
publicstatic void main(String[] args)
{
bytenum = 15 ;
//输出完成 (耗时 0 秒) - 正常终止
}
}
2.
public class Hello
{
publicstatic void main(String[] args)
{
byte num = 15 ; // 因为num是byte,byte的取值范围包括15,所以编译时编译器在最底层偷偷的进行了转换。
num = num + 3 ; //Hello.java:6: 错误:可能损失精度
// 因为 num是 byte类型 3是int类型 int比byte大,所以需要强制转换。
//因为这不属于编译了,而是属于运行阶段: num + 3 = 18 18也在byte的取值范围内,因为属于运行阶段所以会被报错。 然而上面的15不被报错的原因是因为当时处于编译阶段,所以不会被报错。
//num+3要运行起来才能得出结果18。
}
}