黑马程序员技术交流社区
标题:
求解。。三元运算的问题
[打印本页]
作者:
高梦晓
时间:
2013-4-13 11:35
标题:
求解。。三元运算的问题
本帖最后由 高梦晓 于 2013-4-14 16:51 编辑
代码如下:
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了
作者:
梁航斌
时间:
2013-4-13 11:49
StringBuffer里面装的是字符啊,你的s.append(6>5?90:'B');里面的90是整型,打印的时候后转成90对应的字符Z。
class b{
public static void main(String [] args){
StringBuffer s=new StringBuffer();
s.append(1>5?100:'A');
s.append(6>5?90:'B');
//******************
char a = 90;
System.out.println(a);
//******************
System.out.println(s);
}
}
复制代码
作者:
李易烜
时间:
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