黑马程序员技术交流社区

标题: 变量自动转换疑问 [打印本页]

作者: 苏波    时间: 2013-1-10 11:40
标题: 变量自动转换疑问

int a=10;
int b=3;
double c=a/b;
结果为什么是3 而不是3.0,不是在赋值的时候转换成 double类型的了吗
作者: 汪叶庭    时间: 2013-1-10 12:20
应该是 double c=double(a/b)
作者: 王晨    时间: 2013-1-10 12:25
你把a,b的类型定义为double类型应该
作者: 詹卓锋    时间: 2013-1-10 12:28
结果是3.0。不是3,你搞错了。
记住一句话:
参与操作数的数据是什么类型,结果就是什么类型。操作数a、b都是int,那结果就是int。
你定义的c变量是double,而左边a/b的结果是int,这里就涉及一个概念:自动类型转换。
自动类型转换指参与运算的数据类型不同时,Java自动将精度低的数据类型转换成精度高的数据类型。只有所有参与运算的操作数统一了数据类型,才能真正进行运算。   读两遍,你就懂了。
分析:
左边c:double类型   右边结果:a/b:int类型    数据类型不同,不能做真正的运算。因此要把a/b的结果类型(int)自动的转换成double(低int→高double),是自动转换的,这样的话,那a/b就转换成double,那这样左边为double,右边为double,所以可以运算了。结果是:

QQ截图20130110122642.jpg (1.31 KB, 下载次数: 157)

QQ截图20130110122642.jpg

作者: 李阳    时间: 2013-1-10 12:32
二楼正解,a/b的结果是int数据,c是double型数据,所以在赋值前要先进行强制转换。
作者: 詹卓锋    时间: 2013-1-10 12:33
不带double和带double不一样哦,才发现。

QQ截图20130110123037.jpg (8.8 KB, 下载次数: 186)

QQ截图20130110123037.jpg

QQ截图20130110123120.jpg (4.09 KB, 下载次数: 173)

QQ截图20130110123120.jpg

作者: 詹卓锋    时间: 2013-1-10 12:36
有句换没改过来:     System.out.println("带double:c="+c);
作者: 乔培培    时间: 2013-1-10 12:38
楼上,我的测试和你不一样,这是.net
在处理这些类型需要转换的问题时,一定要注意计算的顺序,懂了这个顺序也就明白了结果
在 double c=a/b; 这一句代码里,它计算的顺序是:
第一步:a/b
第二步:c=第一步的结果
我们可以看到,第一步中a和b都是整形,那么计算的结果也是整形 3
第二步将3转换为double类型,这时还是3,并不会在后面增加一个小数点和零

作者: 田旭阳    时间: 2013-1-10 12:38
double可以转换成int。反之不行吧
作者: ╰'宁静致远`    时间: 2013-1-10 12:41
詹卓锋 发表于 2013-1-10 12:33
不带double和带double不一样哦,才发现。

我是这么理解的
double c = a/b; 是先运算后,结果是int类型的,在赋给c double类型的,就3.0
c = double(a/b);是强制转换所以是 3.333...
不知道对不对
作者: 詹卓锋    时间: 2013-1-10 12:44
╰'宁静致远` 发表于 2013-1-10 12:41
我是这么理解的
double c = a/b; 是先运算后,结果是int类型的,在赋给c double类型的,就3.0
c = double ...

应该是,想想。
作者: 汪叶庭    时间: 2013-1-10 12:57
刚回答错了,不好意思。
class Tiaoshi
{
        public static void main(String[] args)
        {
                int a=10;
        int b=3;
                double c=a/b;
                System.out.println(c);
        }
}
不过我调试出来的结果是3.0,你仔细检查一下。http://bbs.itheima.com/forum.php?mod=attachment&aid=MTE2NjF8OWZkODg5N2E0MjJlZDdkMTA0MmQzMTQ1MzMyNTMwMTh8MTczMjI5NjM1OQ%3D%3D&request=yes&_f=.png

QQ截图20130110125453.png (1.22 KB, 下载次数: 216)

QQ截图20130110125453.png

作者: 苏波    时间: 2013-1-10 13:02
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

我  运行 的结果是 3,不是3.0。我用 的 VS
作者: 苏波    时间: 2013-1-10 13:10
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

我 也是这样想的 可是 运行结果却是 3  所以很疑惑
作者: 苏波    时间: 2013-1-10 13:12
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

你错了 int 可以转换成double 反之这不行
作者: 苏波    时间: 2013-1-10 13:13
汪叶庭 发表于 2013-1-10 12:20
应该是 double c=double(a/b)

我问 的是自动转换 不是强制
作者: 苏波    时间: 2013-1-10 13:14
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

但是我 用 vs运行的结果是 3
作者: 苏波    时间: 2013-1-10 13:15
乔培培 发表于 2013-1-10 12:38
楼上,我的测试和你不一样,这是.net
在处理这些类型需要转换的问题时,一定要注意计算的顺序,懂了这个顺 ...

我是这样想 的  可是运行结果却是3
作者: 苏波    时间: 2013-1-10 13:16
王晨 发表于 2013-1-10 12:25
你把a,b的类型定义为double类型应该

那 就不存在转换了 我研究的转换原理
作者: 苏波    时间: 2013-1-10 13:27
我想明白了 应该是这样 在将得到的结果3赋值给double类型的c时发生了隐式转换,是转换了  ,但是输出的形式还是3,这就是隐式转换
作者: 詹卓锋    时间: 2013-1-10 15:11
苏波 发表于 2013-1-10 13:14
但是我 用 vs运行的结果是 3

.net 和 java的 类型转换应该是有差别的,具体还是要了解下。
作者: 罗代势    时间: 2013-1-10 21:24
跟运算的类型有关,a和b都是int类型,所以10/3=3
苏坤老师基础里面的视频讲到这题!!!!
作者: 甘家利    时间: 2013-1-10 22:39
int a=10;
int b=3;
double c=1.0a/b
这样写就行了
作者: 魏庆君    时间: 2013-1-29 21:25
右边的是a/b,所以先在内存中得到的结果是3,然后转换为double类型,结果还是3
作者: 徐荣权    时间: 2013-1-29 21:35
如果a和b其中任意一个是double类型的,系统会把另一个转换成double类型,然后计算。此题中a和b都是int类型,计算结果应该是int类型,c是double类型的,系统会将a/b的结果自动转换成double类型,赋给c。
作者: ﹏_、    时间: 2013-1-30 22:08
本帖最后由 ﹏_、 于 2013-1-30 22:14 编辑

这个程序的过程我知道先是两个整形的进行运算出来之后是3之后在赋值给c的时候自动隐形转换成double类型~~·之后我把程序改了一下直接输出一个double类型的变量出来的还是一个不带小数点的整数,之后我又把那个double类型的数变成9.0在输出还是9我觉的可能是因为这个C#中的double类型如果不带小数位输出的可能就是这个样子~~

QQ截图20130130220823.png (3.46 KB, 下载次数: 45)

QQ截图20130130220823.png

QQ截图20130130221116.png (6 KB, 下载次数: 43)

QQ截图20130130221116.png





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