深入浅析Java 类型提升的约定

上一篇 / 下一篇  2007-12-29 17:33:00 / 个人分类:JAVA+WEB

类型提升的约定
 除了将byt型和short型提升到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);
在第一个表达式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类型.

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 2738
  • 日志数: 63
  • 建立时间: 2007-08-02
  • 更新时间: 2008-07-11

RSS订阅

Open Toolbar