黑马程序员技术交流社区

标题: 三目运算的小问题!<已解决> [打印本页]

作者: 余银桂    时间: 2012-6-13 23:43
标题: 三目运算的小问题!<已解决>
本帖最后由 余银桂 于 2012-6-14 12:50 编辑
  1. class Test2
  2. {
  3.         public static void main(String[] args) {
  4.                 int x=4;
  5.                 System.out.println( (x>4)?9.9:9 );
  6.         }
  7. }

  8. 运行结果是 9.0   三目运算中,基本数据类型也会自动提升么?原理是什么?
复制代码

作者: 匿名    时间: 2012-6-13 23:48
本帖最后由 黑马刘洋 于 2012-6-13 23:58 编辑

应该这么说int是需要进行向下舍入取整的实数、
当(x>4)?9.9:9、所取值应该为9.9但由于int的原因、所以向下进行舍入取整为9.0

作者: 杨天皓    时间: 2012-6-13 23:53
转换类型分为3种
第一种:自动类型转换:比如说在一个较小的数据类型和一个较大的数据类型在做运算是,系统会自动将小的数据类型转换为大的数据类型:
举例:int intnum = 5;   double doubnum = 5.5;   最后运算出来的数据就是double类型的。
第二种:强制转换:也就是将较大的数据转为较小的数据
举例:int num = (int)(1.5+3.7);   输出等于
第三种:包装类过度类型转换:可以运用包装类的各种方法来经行转换,常用的包装类有:Boolean,Character,Integer,Long,Float,Double.


作者: 打工人    时间: 2012-6-13 23:55
当两个数据之间类型不同时,若直接进行比较或赋值运算时会自动先将两个不同类型的数据均转化为其中的某种类型再进行操作,因此会类型提升
   
作者: 余银桂    时间: 2012-6-14 00:01
冯海霞 发表于 2012-6-13 23:55
当两个数据之间类型不同时,若直接进行比较或赋值运算时会自动先将两个不同类型的数据均转化为其中的某种类 ...

三目运算中,2个结果的值也会进行一个比较? 我不懂的是这里....

作者: 王晓新    时间: 2012-6-14 00:23
确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核心就是一下三点:
1.如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
2.如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
3.否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
作者: 黄昆    时间: 2012-6-14 00:23
我们知道在java基本数据的运算中数据类型的转换是向上转换的,(x>4)?9.9:9  这个三目运算也是一种运算符,所以在运算过程中会将int转换为float。不知道这么说楼主是否了解。。。。
作者: 孙新强    时间: 2012-6-14 00:30
class Test2
{
        public static void main(String[] args) {
                int x=4;
                System.out.println( (x>4)?9.9:9 );//(x>4)?9.9:9  这是一个表达式,在一个表达式中进行数值运算,数据就会自动类型转换到该表达式中精度最                                               高的数据类型类型运算 所以结果会输出9.0
        }
}


作者: 赵孟恩    时间: 2012-6-14 00:37
余银桂 发表于 2012-6-14 00:01
三目运算中,2个结果的值也会进行一个比较? 我不懂的是这里....

不是结果比较 三目运算符是一个运算符  就和“+”一样, 像 5+5.0 在运算前首先将不同的类型统一在运算,
5会提升为5.0在运算,所以三目运算符在运算前就将 9 提升为 9.0 了
作者: 杨卫腾    时间: 2012-6-14 00:38
这个属于数值类型转换:
1.拓宽类型:就是将较小类型的变量转换成较大的类型,这个是不需要显式转换的,JVM会自动完成的(即自动提升);
            如,3*4.5;这个二元运算中,一个操作是整数,另一个操作是浮点型,这样JVM会自动将整数转换成浮点型数   成为,3.0*3.5;
2.缩窄类型:  就是将较大类型的变量转换成小类型的变量,这个必须显示转换,否则不会编译通过的。

三木运算中也是这个过程吧!
作者: 李盼    时间: 2012-6-14 08:55
混合运算中,容量小的数据类型会自动转换成容量大的数据类型进行计算,三目运算符也是一种运算,所以会转向其中容量最大的类型,本题9.9是double型的,所有9也会转成double型。小数默认是double型,而不是float型哦!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2