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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kewin.java 中级黑马   /  2015-3-21 18:34  /  1438 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Kewin.java 于 2015-3-21 18:34 编辑

为什么两个结果的值会不一样?
class DoubleTest
{
        public static void main(String[] args)
        {
                double x = 0, y= 0, a = 10, b = 3;
                x = a / b;
                y = 10 /3;
                System.out.println("x="+x);  //x=3.3333333333333335
                System.out.println("y="+y);  //y=3.0
        }
}


13 个回复

倒序浏览
10和3都是整型的数,所以出来是整数,a和b你声明了是double所以能出来小数
回复 使用道具 举报
当我们我们进行除法运算的时候,int/int 是int类型    float/int是float 类型   double/int 是double类型   int/float是float类型。10和3(非声明中a与b的值,因为在声明中double a=10;已经声明成了double类型)都是两个int类型的数据,进行相除的时候实际上是会生成一个int类型的数据,但是在声明的时候y是double类型的,在此过程中就会有一个类型自动提升的过程。
回复 使用道具 举报
楼上的总结得很好,记下来了:D
回复 使用道具 举报
3楼总结的很全面,整型和整型相除得到的只能是整型,java里面有很多这样的隐式类型变换,遇到了记住就行
回复 使用道具 举报
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335
回复 使用道具 举报
xiaogougou 发表于 2015-3-21 21:56
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335

y=10/3,10和3默认是int类型的,等于3,然后强制转换成double类型的赋给y,结果就是3.0了。
回复 使用道具 举报
涨姿势了。。
回复 使用道具 举报
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335
回复 使用道具 举报
  float 与int都是占4个8位的二进制,但因为 float有小数,所以它们运算的结果为 float类型,double是占8个8位的二进制,所以和int运算的结果类型为double的
回复 使用道具 举报
a和b都是double类型,所以得到这个结果肯定没问题。至于,y=10/3;10和3都是默认类型int,所以得出的结果为3,但是y为double类型,所以类型提升,结果为3.0。希望能帮助到您!
回复 使用道具 举报
妖妖 发表于 2015-3-21 19:50
当我们我们进行除法运算的时候,int/int 是int类型    float/int是float 类型   double/int 是double类型   ...

解释的很详细,很全啊,受教了。
回复 使用道具 举报
最简单的理解就是 y = 10 /3,10和3默认都是整型,除的结果自然也是整型,类型自动提升了……
回复 使用道具 举报
因为定义x、a、b是double 类型,结果出来肯定是上面的结果,而下面直接用的是整数int 10/3,得到的结果给了y,但y是double,所以是3.0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马