分享
 
 
 

java表达式中类型的自动提升

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

除了赋值,还有另外一种类型变换:在表达式中。想要知道原因,往下看。在表达式中,对中间值的精确要求有时超过任何一个操作数的范围。例如,考虑下面的表达式:

byte a = 40;

byte b = 50;

byte c = 100;

int d = a * b / c;

中间项结果a*b 很轻易超过它的任何一个byte 型操作数的范围。为处理这种问题,当分析表达式时,Java 自动提升各个byte 型或short型的操作数到int 型。这意味着子表达式a*b 使用整数而不是字节型来执行。这样,尽管变量a和b都被指定为byte 型,50*40 中间表达式的结果2000 是合法的。

自动类型提升有好处,但它也会引起令人迷惑的编译错误。例如,这个看起来正确的程序却会引起问题:

byte b = 50;

b = b * 2; // Error! Cannot assign an int to a byte!

该程序试图将一个完全合法的byte 型的值50*2 再存储给一个byte 型的变量。但是当表达式求值的时候,操作数被自动地提升为int 型,计算结果也被提升为int 型。这样,表达式的结果现在是int 型,不强制转换它就不能被赋为byte 型。确实如此,在这个非凡的情况下,被赋的值将仍然适合目标类型。

在你理解溢出的后果的情况下,你应该使用一个显式的强制类型转换,例如:

byte b = 50;

b = (byte)(b * 2);

它产生出正确的值100 。

3.10.1 类型提升的约定

除了将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);

在第一个子表达式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 类型。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有