日期:2014-05-20  浏览次数:20706 次

请教高手一个问题,谢谢
public class Conditional{
public static void main(String args[ ]){
int x=4;
System.out.println(“value is “+ ((x>4) ? 99.9 :9));
}
}


请问这个程序的结果为什么是9.0,而不是9呢?

------解决方案--------------------
=====以下是个人猜测============
取99.9,和9之间精度较大的输出。
相当于:
System.out.println(“value is “+ ((x>4) ? 99.9 :(double)9));

------解决方案--------------------
/** 
* 基本类型的自动提升 

* 自动提升的规则如下: 

* 如果两个操作数中有一个是double类型,则系统先将另一个操作数转换为double类型,然后运算,否则 
* 如果两个操作数中有一个是float类型,则系统先将另一个操作数转换为float类型,然后运算,否则 
* 如果两个操作数中有一个是long类型,则系统先将另一个操作数转换为long类型,然后运算,否则 
* 所有的操作数都被转换为int类型进行运算(低于int类型的会自动提升) 

* 如果采用"+=","*="等缩略形式的运算符,则系统会强制将运算结果转换为目标变量类型。 

*/ 

看完这个应该可以明白的

------解决方案--------------------
类型转换了,

int和float 转float;
float和double转double ;


------解决方案--------------------
探讨

/**
* 基本类型的自动提升
*
* 自动提升的规则如下:
*
* 如果两个操作数中有一个是double类型,则系统先将另一个操作数转换为double类型,然后运算,否则
* 如果两个操作数中有一个是float类型,则系统先将另一个操作数转换为float类型,然后运算,否则
* 如果两个操作数中有一个是long类型,则系统先将另一个操作数转换为long类型,然后运算……

------解决方案--------------------
详细解答 见 传送门