黑马程序员技术交流社区

标题: 三元运算符的一个问题. [打印本页]

作者: 周兴中    时间: 2012-6-22 01:04
标题: 三元运算符的一个问题.
本帖最后由 周兴中 于 2012-6-25 09:50 编辑

如题:我知道是因为三元运算符中,"n1>9?(char)(n1-10+'A'):n1"由于n1是整数,所以结果被提升成了整型,我想问的是怎么样才能得到我想要的char类型?

int num = 60;
//获取60的最低4位,通过&15
int n1 = num & 15;

system.out.println(n1>9?(char)(n1-10+'A'):n1); //此处输出67,该怎么写才能得到char类型的值.
//要获取下一组四位,将60右移4位.
int temp = 60 >>> 4;

//对temp的值进行最低4位的获取.
int n2 = temp & 15;
system.out.println(n2>9?(char)(n2-10+'A'):n2); //输出3

这个代码是将十进制转成16进制,当n1不大于9的情况下,n1是要得到整型的,如果也被转换成char就没意义了.
是不是用三元运算符无法实现.?



作者: 打工人    时间: 2012-6-22 01:44
本帖最后由 冯海霞 于 2012-6-22 02:30 编辑

System.out.println(n1>9?(char)(n1-10+'A'):(char)n1); //这样是可以得到C的,就是将n1也强制转换成char
通常表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。如果想把结果赋值给较小的数据类型就要使用类型转换
作者: 打工人    时间: 2012-6-22 01:45
System.out.println(n1>9?(char)(n1-10+'A'):(char)n1);
作者: 打工人    时间: 2012-6-22 01:46
怎么总是出现表情捏
作者: 打工人    时间: 2012-6-22 01:48
就是system.out.println(n1>9?(char)(n1-10+'A'):  (char)n1);
将n1也强制转换为char
作者: 余银桂    时间: 2012-6-22 01:54
本帖最后由 余银桂 于 2012-6-22 01:57 编辑

楼上的正解,只要把右边的也强转为 char 类型就行了

System.out.println(n1>9?(char)(n1-10+'A')  :  (char)n1);

两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定,不可能条件为真时返回char类型,条件为假时返回int类型,编译器是不允许如此的,所以它就会进行类型转换了.转换规则:以大为准

作者: 张华廷    时间: 2012-6-22 07:46
System.out.println(n1>9?(char)(n1-10+'A'):(char)n1); 两个操作数的类型不一致把右边的也强转为 char 类型就可以了
作者: 周兴中    时间: 2012-6-22 11:10
这个代码是将十进制转成16进制,当n1不大于9的情况下,n1是要得到整型的,如果也被转换成char就没意义了.
作者: 游洪波    时间: 2012-6-23 19:09
对,把n1强制转换成char类型这样系统就会自动将返回值的类型转换为char了,因为java中式不允许返回类型不一致的所以编译时会自动把你的类型转换一致,而转换机制又是那个类型最大转换成那个,所以刚才你的程序只会返回int类型而不会返回char类型,即使结果为真也会把返回值类型给成int的。
System.out.println(n1>9?(char)(n1-10+'A')  :  (char)n1);

作者: 周兴中    时间: 2012-6-25 21:56
余银桂 发表于 2012-6-22 01:54
楼上的正解,只要把右边的也强转为 char 类型就行了

System.out.println(n1>9?(char)(n1-10+'A')  :  (cha ...

看来这就是三元运算符的局限.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2