网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > JSP > 正文
J2SE综合 使用条件运算符的阵痛
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/28
下载{$ArticleTitle}原创论文样式

  一、案例编号:

  U02C09

  二、案例名称:

  使用条件运算符的阵痛

  三、关键词:

  条件运算符、三目运算符、三元运算符、类型转换

  四、案例情景描述:

  条件运算符有三个操作数。它的形式是:boolean-exp?exp1:exp2。它首先计算boolean表达式的值,如果为true那么整个表达式的值就是表达式exp1的值,如果boolean表达式的值为false,那么整个表达式的值就是exp2的值。

  intk=(2>3)?23:45;因为boolean表达式2>3为false,所以k的值是45。

  上述都是关于条件运算符值的确定,那么条件运算符值的类型又是怎么确定的呢?看下述代码:

  (1)

  charx=‘A’;  //line1

  inti=0;  //line2

  System.out.println(true?x:0);  //line3

  System.out.println(true?x:1111111110);  //line4

  System.out.println(false?i:x);  //line5

  (2)

  /*

  *假设Test是已经定义的某个类

  */

  Testt=flase?newObject():newTest();

  五、案例理论分析:

  1、我们先看第一个代码片段:三个输出语句会输出什么结果呢?

  你也行会认为输出结果是:

  'A'

  'A'

  'A'

  当你运行一下这段代码,它的真正结果是:

  'A'

  65

  65

  为什么会有这样的结果呢?实质上这就是条件运算符对于运算结果类型的限制:

  (1)如果表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。

  (2)如果一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。

  (3)除以上情况外,如果表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。

  System.out.println(true?x:0);  //line3。表达式1是char类型,表达式2是int类型的常量表达式,而且这个常量表达式的值0可以用char类型来表示,因此整个条件运算符结果的类型就应当是char类型,所以输出的结果就是'A'。

  System.out.println(true?x:1111111110);  //line4。表达式1是char类型,表达式2是int类型的常量表达式,但是这个常量表达式的值已经超出了char类型的取值范围,因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型了,所以输出的结果是65(字符A的ASCII码)。

  System.out.println(false?i:x);  //line5。表达式1是int类型的变量,表达式2是char类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型。所以输出结果就是65。

  2、我们再看第二个代码片段,它的结果是在编译阶段引发错误。为什么?

  Testt=flase?newObject():newTest();我们看到表达式1是Object类型,表达式2是Test类型。没有常量表达式,类型不同,因此要进行类型提升的。要把Test类型提升为Object类型,因此整个条件运算符结果的类型应当是Object类型。当在赋值的时候要把Object类型赋值给Test类型的变量,当然会引发编译错误。

(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号