Java新职篇:类型提升的约定

除了将byte型和shorts型提升到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); 

在第一个子表达式fb中,变量b被提升为float类型,该子表达式的结果当然是float类型。接下来,在子表达式i/c,中,变量c被提升为int类型,该子表达式的结果当然是int类型。然后,子表达式ds中的变量s被提升为double类型,该子表达式的结果当然也是double类型。
最后,考虑三个中间值,float类型,int类型,和double类型。float类型加int类型的结果是float类型。然后float类型减去提升为double类型的double类型,该表达式的最后结果是double类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值