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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fengche 中级黑马   /  2013-10-18 10:51  /  1450 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fengche 于 2013-10-18 14:46 编辑

public class Equis{
        public static void main(String[] args){
                char x = 'X';
                int i = 0;
                System.out.println(true ? x : 0);
                System.out.println(false ? i : x);
        }
}
打印的结果是 X 88 两次打印的的该都是X为什么一个是字符X一个是88?我是新手望大神解释

评分

参与人数 1黑马币 +3 收起 理由
To + 3 神马都是浮云

查看全部评分

6 个回复

倒序浏览
这个是三元运算符的运算。
第一个表达式:true ? x :0  因为x的类型为char,当表达式为真的时候,结果类型为char,得到的结果是X。
第二个表达式:false ? i : x,因为i的类型为整型,当表达式为false的时候,结果类型为int,于是char向上转型为整型,所以输出88
回复 使用道具 举报
88在ACSII码中就是X,第二个打印的是ASCII码的X,具体我也不知道为什么,可能是因为前面i是int型,而x是char型,这两个做比较,系统自动把char转换成int了
回复 使用道具 举报
这个是因为,后边两个数据类型要相同,不同向上转型
回复 使用道具 举报
☆╰學不会☆╮ 发表于 2013-10-18 10:59
这个是三元运算符的运算。
第一个表达式:true ? x :0  因为x的类型为char,当表达式为真的时候,结果类型为 ...

这个说法不太对吧,计算机在处理字符类型时,是把这些字符当成不同的整数来看待的,不用强转
回复 使用道具 举报
本帖最后由 Jim-剣◆﹏ 于 2013-10-18 13:19 编辑
☆╰學不会☆╮ 发表于 2013-10-18 10:59
这个是三元运算符的运算。
第一个表达式:true ? x :0  因为x的类型为char,当表达式为真的时候,结果类型为 ...

查了资料,看楼下,不一定都强转
回复 使用道具 举报
Jim-剣◆﹏ 发表于 2013-10-18 13:13
查了资料,哥们你是对的

下面的代码是面试宝典上的一道题目:
[java]
int a=5;
System.out.println("a="+((a<5)?10.9:9));
这段代码的输出是9.0。因为三目运算符中有一个10.9,java会根据运算符的精度类型进行自动类型转换。因此9会变为9.0
[java]
char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?100:x);
而这段代码的输出是
120
x
对于第一行输出,与上个例子相同,x被提升了类型,变为int
而对于第二行,由于10是一个常量。若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。因此输出是字符x
[java]
System.out.println(true?100:x);
因此这行代码将输出d,也就是100对应的char值
摘自某it博客

评分

参与人数 1技术分 +1 收起 理由
To + 1 很热心的小伙

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马