这个问题很有意思,我也不知道答案,但是下面的代码输出却是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中的三元运算符是指:
如果?(在此式中为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,再作/运算