当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > 基础教程 > 正文

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

http://www.zk168.com.cn  招考学习网 2006-4-11 0:55:58
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
除了赋值,还有另外一种类型变换:在表达式中。想要知道原因,往下看。在表达式中,对中间值的精确要求有时超过任何一个操作数的范围。例如,考虑下面的表达式: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 类型。
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·环保企业人力资源开发与管理的实证研究————巨龙公
·重油制气污水处理系统(A/O)技术改造
·英美CPA管理模式及其启示
·改造NERA微波公务信道为国产监控信道
·EAStudio让电子商务网站如虎添翼
·基于PB6和ORACLE8开发“劳动信息管理系统”
·巧解Pretty  Park 病毒一例
·CDMA在中国的应用以及向CDMA2000的过度中的问题研究
·SMA施工控制与现场监理
·浅谈改性沥青及SMA路面平整度的控制
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>