黑马程序员技术交流社区
标题:
关于三元运算符的一个问题
[打印本页]
作者:
amen0205
时间:
2013-3-2 00:23
标题:
关于三元运算符的一个问题
本帖最后由 门文通 于 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
为什么?
作者:
薛飞
时间:
2013-3-2 00:56
三目运算符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回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。
作者:
lzw123451
时间:
2013-3-2 03:03
给你个相似的例子:
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值
作者:
黄玉昆
时间:
2013-3-2 07:38
我补充一点,对于三元运算符:条件表达式?表达式1:表达式2;其中返回的是一个值,必须有变量接收这个值,并且表达式1和2的类型必须是相同的,是char都是char,是int都是int
作者:
何伟
时间:
2013-3-2 13:09
第一例子;三元运算符第二个表达式是定义好的n,
而第二个l例子;三运运算符的第二个表达式是60,强转后就是60所对应的ASCLL值;
其实第二个例子int n=60定义和没定义不会影响结果,因为第二个例子没用到n
作者:
amen0205
时间:
2013-3-2 22:23
薛飞 发表于 2013-3-2 00:56
三目运算符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回char类型,条件为假时返回int类型, ...
谢谢啊 这个知识点基本理解了 不过你说以大为准 大指的是数据类型吧 int是32位 char是16位 所以是char转换为int是吧? 2 如果两个表达式一个是常量 一个T类型 且常量表达式不能被T表示 那该怎么转换 ? 3 如果是两个变量表达式 类型也不能互转 如int boolean 那怎么办
作者:
BitmapFactory
时间:
2013-3-3 07:10
学习了,还真不知道这些知识点
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2