A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 郑雪 中级黑马   /  2013-5-1 08:50  /  1508 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑雪 于 2013-5-2 10:37 编辑

看这段代码
public class Q6
{
        public static  void  main(String  args[ ]){
                int  x=4;
                System.out.println("value is"+((x>4) ? 99.99 : 9) );
        }
}
输出结果是value is9.0,为什么是9.0而不是9?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
是因为:System.out.println("value is"+((x>4) ? 99.99 : 9) );
如果x>4,则打印99.9,如果x<4则打印9,虽然x是int类型,但99.9或者9,它的类型跟x是没关系的,但99.9和9 在一起做运算的话,9会提升为99.9的类型(默认是double类型),所以结果就是9.0.

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
int和float类型之间做运算转换为int,所以要避免损失精度问题
但实数默认是double类型的。
回复 使用道具 举报
本帖最后由 403383221 于 2013-5-1 10:13 编辑

这个是因为三目运算符比较特殊
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。如果常量不能被T表示,则提升类型,如:
System.out.println(false?99999:x);
结果为
120

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
我自己的理解是这样的
  1. public class Q6
  2. {
  3.         public static  void  main(String  args[ ])
  4.                 {
  5.                 int  x=4;double y;
  6.                                
  7.                                 if (x>4)
  8.                                         y=99.9;
  9.                                 else
  10.                                         y=9;
  11.                 System.out.println(y);
  12.         }
  13. }
复制代码
我觉得引入第二个变量就比较好理解了。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
java运算时,为了避免损失精度,会根据运算符的精度类型进行类型转换,因为99.99比9精度要高,所以会 转换成float类型的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马