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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高梦晓 中级黑马   /  2013-4-13 11:35  /  1844 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高梦晓 于 2013-4-14 16:51 编辑

代码如下:
  1. class b{
  2. public static void main(String [] args){
  3. StringBuffer s=new StringBuffer();
  4. s.append(1>5?100:'A');
  5. s.append(6>5?90:'B');
  6. System.out.println(s);
  7. }
  8. }
复制代码
为什么结果是AZ,不是A90应该跟append无关吧,
System.out.println(6>5?100:'b');会打印d
System.out.println(1>5?'b':100.5);就会打印100.5了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
StringBuffer里面装的是字符啊,你的s.append(6>5?90:'B');里面的90是整型,打印的时候后转成90对应的字符Z。
  1. class b{
  2. public static void main(String [] args){
  3. StringBuffer s=new StringBuffer();
  4. s.append(1>5?100:'A');
  5. s.append(6>5?90:'B');
  6. //******************
  7. char a = 90;
  8. System.out.println(a);
  9. //******************
  10. System.out.println(s);
  11. }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
s.append(6>5?90:'B');
这句会把90变成字符传进StringBuffer
回复 使用道具 举报
03.StringBuffer s=new StringBuffer();因为你加了这个,所以你的操作应该都是String类型的,90在ascall表里代表大写的Z
回复 使用道具 举报
三元运算符的格式是。  条件 ? 结果1 : 结果2  如果条件为真就执行结果1,反之执行结果2。

回复 使用道具 举报
你这个问题产生的原因是:两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回char类型,条件为假时返回int类型,编译器不允许如此,所以它就会进行类型转换了.转换规则:以大为准。
但你这里还有个情况,就是当其中一个是byte,short或者char而另外一个是int时,如果这时这个int的值能用其它三种类型来表示,则返回其它三种类型的。
所以结果是AZ、
System.out.println(1>5?'b':100.5);100.5是double类型,所以'b'被提升为double。所以输出100.5。
回复 使用道具 举报
这是我用来理解三目运算符的例子,希望能帮到你
int a=5;
System.out.println("a="+((a<5)?10.9:9));
这段代码的输出是9.0。因为三目运算符中有一个10.9,java会根据运算符的精度类型进行自动类型转换。因此9会变为9.0
char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?100:x);
而这段代码的输出是
120
x
对于第一行输出,与上个例子相同,x被提升了类型,变为int
而对于第二行,由于100是一个常量。若三目运算符中的两个表达式有一个是常量表达式,另一个是类型T的表达式,且常量表达式可以被T表示,则输出结果是T类型。因此输出是字符x

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-14 14:20:00
8#
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马