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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周兴中 中级黑马   /  2012-6-22 01:04  /  2537 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周兴中 于 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就没意义了.
是不是用三元运算符无法实现.?


评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 新手报到,鼓励一下!

查看全部评分

9 个回复

倒序浏览
本帖最后由 冯海霞 于 2012-6-22 02:30 编辑

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

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

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

两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定,不可能条件为真时返回char类型,条件为假时返回int类型,编译器是不允许如此的,所以它就会进行类型转换了.转换规则:以大为准
回复 使用道具 举报
System.out.println(n1>9?(char)(n1-10+'A'):(char)n1); 两个操作数的类型不一致把右边的也强转为 char 类型就可以了
回复 使用道具 举报
这个代码是将十进制转成16进制,当n1不大于9的情况下,n1是要得到整型的,如果也被转换成char就没意义了.
回复 使用道具 举报
对,把n1强制转换成char类型这样系统就会自动将返回值的类型转换为char了,因为java中式不允许返回类型不一致的所以编译时会自动把你的类型转换一致,而转换机制又是那个类型最大转换成那个,所以刚才你的程序只会返回int类型而不会返回char类型,即使结果为真也会把返回值类型给成int的。
System.out.println(n1>9?(char)(n1-10+'A')  :  (char)n1);
回复 使用道具 举报
余银桂 发表于 2012-6-22 01:54
楼上的正解,只要把右边的也强转为 char 类型就行了

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

看来这就是三元运算符的局限.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马