这个问题很有意思,我也不知道答案,但是下面的代码输出却是5
public class q{
public static void main(String args[]){
int a = 5;
System.out.println("Value is - " + ((a < 5) ? 4 :5));
}
}比较一下就知道,或许结果的取值与?后面的值有关了。
只能是猜测了,望有高手指点了
public class q{
public static void main(String args[]){
int a = 5;
System.out.println("Value is - " + ((a < 5) ? 4 :5));
}
}比较一下就知道,或许结果的取值与?后面的值有关了。
只能是猜测了,望有高手指点了
解决方案 »
- java SE 两个小问题
- 如何设置JTree叶子节点的高度和叶子节点的间距
- 大家讨论一下,Iterator遍历和List遍历有什么不同,在什么情况下,使用相应的遍历?
- 有没有能识别java编写的控件的Spy++
- 新手请教!关于数值优化的问题!谢谢!
- 关于关闭窗口的程序
- 『正则表达式』数字、字母、下划线,点号、连接号及中文的PATTERN怎么写?
- java 可以使用 可是javac不可以使用。老兄帮帮忙
- 学JAVA有什么好书?JAVA2核心技术?
- java的applet中是否有将一个字符串转为对象处理?如:"Label1"转为Label?
- 请问java什么编译器好用?
- 敬请高手指点:)谢谢:)
java中的三元运算符是指:
如果?(在此式中为a<5)前的判别式返回值为true,则此运算式的值为:之前的数或式子(在此式中为4);?(在此式中为a<5)前的判别式返回值为false,则此运算式的值为:之后的数或式子(在此式中为5)。
if(a<5){
System.out.println("Value is - " + 4));
}else{
System.out.println("Value is - " + 5));
}
经过这一条语句,你的5已经自动转换为double型了,因为4.6是double型的
然后它会以byte -> short -> int -> long -> float ->double 这个方向对结果进行自动转换。如要反过来要显式转换。
但我很奇怪,他怎么会根据?后面的转型呢?
要知道(a<5)返回false后是不会执行?后面的表达式的
如: int a = 5;
int b = 6;
System.out.println("Value is - " + ((a < 5) ? ++b : ++a));
System.out.println(a);
System.out.println(b);
结果是a = 6; b = 6;
也就是说++b没有执行,不明白,他的输出结果怎么又会根据?后面的值转型呢?
上面的4.6和5没有声明,java把没声明的拿去做处理,根据我上面说的顺序转型(根据最“大”类型)
自然结果为double型的
自动转换和显式转换的优先级是一样的,都是强制类型转换
优先级低于一元运算符(++,--),高于二元运算符(+,-等)
int a=5;
float f=(float)a/2; //显式转换,高于/运算,先将操作数转换成float,再作/运算