表达式类型的自动提升

来源:互联网 发布:workbanch 导出mysql 编辑:程序博客网 时间:2024/06/07 14:41

 当算术表达式包含多个基本数据类型时,整个算术表达式的数据类型会在数据运算时出现类型的自动提升

  • 所有的 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

  1. 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 ; //因为numbytebyte的取值范围包括15,所以编译时编译器在最底层偷偷的进行了转换。

num = num + 3 ; //Hello.java:6:错误:可能损失精度

//因为 num byte类型  3int类型  intbyte大,所以需要强制转换。

//因为这不属于编译了,而是属于运行阶段: num + 3 = 18 18也在byte的取值范围内,因为属于运行阶段所以会被报错。 然而上面的15不被报错的原因是因为当时处于编译阶段,所以不会被报错。

//num+3要运行起来才能得出结果18

}

}




原创粉丝点击