黑马程序员技术交流社区

标题: 求解。。三元运算的问题 [打印本页]

作者: 高梦晓    时间: 2013-4-13 11:35
标题: 求解。。三元运算的问题
本帖最后由 高梦晓 于 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了
作者: 梁航斌    时间: 2013-4-13 11:49
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. }
复制代码

作者: 李易烜    时间: 2013-4-13 12:07
s.append(6>5?90:'B');
这句会把90变成字符传进StringBuffer

作者: Asan    时间: 2013-4-13 12:11
03.StringBuffer s=new StringBuffer();因为你加了这个,所以你的操作应该都是String类型的,90在ascall表里代表大写的Z
作者: 山西_李帅    时间: 2013-4-13 12:19
三元运算符的格式是。  条件 ? 结果1 : 结果2  如果条件为真就执行结果1,反之执行结果2。


作者: 黑马伍哲沂    时间: 2013-4-13 12:34
你这个问题产生的原因是:两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定, 不可能条件为真时返回char类型,条件为假时返回int类型,编译器不允许如此,所以它就会进行类型转换了.转换规则:以大为准。
但你这里还有个情况,就是当其中一个是byte,short或者char而另外一个是int时,如果这时这个int的值能用其它三种类型来表示,则返回其它三种类型的。
所以结果是AZ、
System.out.println(1>5?'b':100.5);100.5是double类型,所以'b'被提升为double。所以输出100.5。
作者: ld5128702    时间: 2013-4-13 12:38
这是我用来理解三目运算符的例子,希望能帮到你
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
作者: 黄玉昆    时间: 2013-4-14 14:20
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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