深入探讨Java类型提升的约定[转]

    转: http://doc.chinaunix.net/java/200804/160498.shtml

 

     除了将byt型和short型提升到int型以外,java定义了若干适用于表达式的类型提升规则(type promotion rules). 首先,如刚才描述的,所有的byte型和short型的值被提升到int型.其次,如果一个操作数是long型,整个表达式将被提升到long型;如果一个操作数是float型,整个表达式将被提升到float型;如果有一个操作数是double型,计算结果就是double型.下面的程序表明:在表达式中的每个值是如何被提升以匹配各自二进制运算符的第二个参数:

 

<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  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类型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值