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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-7 16:50  /  1250 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-8 18:34 编辑

今天在看java基础知识时遇到一个题目,求解:
为什么 -0/3 结果是 0,而  -0.0/3.0 结果是 -0.0?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 FFF 于 2013-10-7 19:55 编辑

这个是默认基本数据类型的问题:
-0/3  -0和3都是整形的int类型。而int类型的0格式为0,所以-0除3等于0
而-0.0/3.0默认的是double类型,而double类型的0格式为0.0,所以结果为0.0

如果算法和公式中有小数的,取小数的基本数据类型
如果在小数后加F或f(如0.12F或0.12f)则为float
如果小数后加D或d,或不加(如0.12D或0.12d或0.12)则为double类型
如果在数字后面加l则为int类型

我还记得有一个面试题是这样的
问:
输出System.out.ptintln(1+1l);
结果是什么?
正确的是输出为int类型的数字2
结果有人不小心把l看成是1输出为12,结果错了!

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
周志龙 + 1
To + 3 解释很强大

查看全部评分

回复 使用道具 举报
基本运算,先匹配操作数,操作数的类型都自动转换成 占用内存多的那个操作数的类型。然后除法运算,得出的结果的符号跟被除数的符号相同。被除数是负数,结果就是负数;被除数是正数,结果就是正数。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
这是个关于数据类型方面的问题,首先前者被除数和除数都是整数类型(int)所以结果的数据类型为整型,
后者都是double类型的数据,结果自然是double类型的,双精度类型。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
如果提问结束,请结贴
回复 使用道具 举报
如果运算中有一个操作数为long/float/double型,那么结果就是对应的long/float/double
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马