动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.TortoiseSVN从1.2.6升级到1.3.2过.
.循速渐进学用Session Bean(三).
.且看微软的.Net和Sun公司的J2EE如.
.操纵java数组.
.java国际化基础知识.
.XP精华-如何使 Java 项目获得更大.
.赋值运算符.
.实例讲解如何用Struts向MySQL中储.
.Spring的核心机制依赖注入简介.
.servlet中实时地创建图象.
.轻松有效检查Java代码的三个工具.
.Servlet 容器的工作原理 ( 二 ).
.J2EE 1.4 的新特性完全展播.
.Java操作Word,Excel,Access,IE,O.
.乘法赋值运算符 (*=).
.Java Socket编程之二.
.Java的声音处理介绍.
.字节码如何防止内存错误及提高代.
.JAVA 省略语与名词解释.
.随机数 获取背景音乐.

J2SE综合 使用条件运算符的阵痛

发表日期:2008-1-5 |



  一、案例编号:

U02C09

二、案例名称:

使用条件运算符的阵痛

三、要害词:

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

四、案例情景描述:

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

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

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

(1)
char x=‘A’;    //line1
int i=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是已经定义的某个类
*/
Test t=flase?new Object():new Test();

五、案例理论分析:

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、我们再看第二个代码片段,它的结果是在编译阶段引发错误。为什么?

    Test t=flase?new Object():new Test();我们看到表达式1是Object类型,表达式2是Test类型。没有常量表达式,类型不同,因此要进行类型提升的。要把Test类型提升为Object类型,因此整个条件运算符结果的类型应当是Object类型。当在赋值的时候要把Object类型赋值给Test类型的变量,当然会引发编译错误。
上一篇:Liferay Portal 之 jbpm 配置 人气:979
下一篇:Struts中关于用户权限限定的建议 人气:456
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号