A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© amen0205 中级黑马   /  2013-3-2 00:23  /  2939 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 门文通 于 2013-3-11 00:14 编辑

例1
int n=60;
System.out.println(n>10?(char)(n-10+‘A’):n);

例2
int n=60;
System.out.println(n>10?(char)(n-10+‘A’):60);

例1的结果是115   例2 是 s

为什么?

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
三目运算符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回char类型,条件为假时返回int类型,编译器是不允许如此的,所以它就会进行类型转换了.转换规则:以大为准。
例1 n>10?(char)(n-10+‘A’):n,n已定义为int型,前面强制转化为char后,三目运算符要保证前后类型一致,则编译器会把char转化为int型,故结果为115。
例2 n>10?(char)(n-10+‘A’):60,前面字符为s,后面为60对应的ASCLL码字符为<,前后都是字符,故结果为s。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 很给力!

查看全部评分

回复 使用道具 举报
给你个相似的例子:

char x='x';
int i=100;
System.out.println(false?i:x);
System.out.println(false?100:x);
而这段代码的输出是
120
x
对于第一行输出,x被提升了类型,变为int。正如上面的朋友所说三目运算符必须要返回一个数据,而且类型要确定,转换以大为准。
而对于第二行,由于10是一个常量。若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。因此输出是字符x
这里可以用字符式来代表100这个数,所以以字符Char类型作为返回类型。
System.out.println(true?100:x);
因此这行代码将输出d,也就是100对应的char值

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

回复 使用道具 举报
我补充一点,对于三元运算符:条件表达式?表达式1:表达式2;其中返回的是一个值,必须有变量接收这个值,并且表达式1和2的类型必须是相同的,是char都是char,是int都是int
回复 使用道具 举报
第一例子;三元运算符第二个表达式是定义好的n,
而第二个l例子;三运运算符的第二个表达式是60,强转后就是60所对应的ASCLL值;
其实第二个例子int n=60定义和没定义不会影响结果,因为第二个例子没用到n
回复 使用道具 举报
薛飞 发表于 2013-3-2 00:56
三目运算符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回char类型,条件为假时返回int类型, ...

谢谢啊  这个知识点基本理解了   不过你说以大为准   大指的是数据类型吧   int是32位  char是16位 所以是char转换为int是吧?   2 如果两个表达式一个是常量 一个T类型  且常量表达式不能被T表示   那该怎么转换 ?  3  如果是两个变量表达式  类型也不能互转  如int   boolean   那怎么办  
回复 使用道具 举报
学习了,还真不知道这些知识点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马