java三元运算符

classb{publicstaticvoidmain(String[]args){StringBuffers=newStringBuffer();s.append(1>... class b{
public static void main(String [] args){
StringBuffer s=new StringBuffer();
s.append(1>5?100:'A');
s.append(6>5?90:'B');
System.out.println(s);
}
}
为什么结果是AZ,不是A90
应该跟append无关吧,
System.out.println(6>5?100:'b');会打印d
System.out.println(1>5?'b':100.5);就会打印100.5了
展开
 我来答
天方之夜谭
推荐于2017-10-13 · TA获得超过587个赞
知道小有建树答主
回答量:223
采纳率:100%
帮助的人:204万
展开全部
我错了,刚才试了一下,下面是我的结论:
在程序执行的时候会自动匹配数据类型调用对应的方法,但这两次调用的不是同一个方法。依据如下:
使用int i = 90;s.append(6>5?i:'B');的话调用的就是append(int),而使用s.append(6>5?90:'B');的话调用的就是append(char)。
区别在于编译的时候,使用变量i作为传递的参数时,三元运算符会保留期变量名作为参数,而在取i的值时会根据i的类型匹配方法;
而使用90最为传递参数时,编译器在选择数据类型时会参考“:”两侧的数据类型,如果匹配或足以存储该数据则存储为同一数据类型,如果不匹配则替换成其他数据类型。
'B'在编译时被存储为char型,而90因为没有指定数据类型且可以被char这个数据类型所表示,所以被保存为char型。即使使用强制类型转换也会被忽略,因为常量的数据类型转换会在编译器编译之前一步进行,就像gcc处理宏一样,所以不会起到强制类型转换的作用。
echo情已逝
2012-03-27 · TA获得超过283个赞
知道小有建树答主
回答量:391
采纳率:100%
帮助的人:87.8万
展开全部
因为90是大写字母Z。它在显示90时,转换成了字母Z了。。
你可以
public class b {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("");
s.append(1 > 5 ? 100 : 'A');
s.append(6 > 5 ? (90+"") : 'B');
System.out.println(s);
}
}
这么修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lihongming88
2012-03-27
知道答主
回答量:12
采纳率:0%
帮助的人:7.1万
展开全部
'B'是字符型,0-65535,90<65535,所以字符型大,自动转成字符型,90正好是'Z',所以是AZ
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式