初学者基础问题,我的ID就是立刻结贴的保障!

joejoe1991 2008-07-14 12:51:12
为什么short i = 10;
没有错而float a = 1.0;却有错。
(不要回答我将1.0改成1.0F)

整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
如果是这样的话,那为什么
short i = 10;没有错,10不应该是int类型的么?
如果说10没有超过short的范围,所以可以这么做,那为什么float a = 1.0;又有错了?1.0也没有超过float的范围啊?


为什么1/ 0有错而1 / 0.0没有错?得到的是无穷。
这不都是0么。

谢谢回答。!
...全文
356 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjaihua 2009-05-14
  • 打赏
  • 举报
回复
一直将就,看来还是楼主精明啊
25楼答案漂亮
学习ing
海诗美妆 2008-07-15
  • 打赏
  • 举报
回复
这是Java语法所定,并不需要考虑为什么。

这就像说中国话要用主谓宾排列,为什么?————没有为什么
这一点跟学外语很相像,不需要问为什么。
wensheng_zh2007 2008-07-15
  • 打赏
  • 举报
回复
学习了
mim198500 2008-07-15
  • 打赏
  • 举报
回复
楼上精辟
dracularking 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 joejoe1991 的帖子:]
那为什么
short i = 10;没有错,10不应该是int类型的么?
如果说10没有超过short的范围,所以可以这么做,那为什么float a = 1.0;又有错了?1.0也没有超过float的范围啊?
[/Quote]
试着回答一下,简言之,对于int,short,byte的1,它们是兼容的 适用于自动转换(无代价)
而对于double float的1.0两者是不直接兼容的 不适用于自动转换(会损失精度)
why?

int转为short,byte只要将高位的0截断
而float 32位保存 SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM 其中S是符号位 E是指数位 M是有效精度位
类比于double 52位精度

The "float" class takes 4 bytes of storage, and have 23 binary digits of precision. The "double" class takes 8 bytes of storage, and have 52 binary digits of precision.
老紫竹 2008-07-14
  • 打赏
  • 举报
回复
short 这个是编译器干的。因为你用的是常量,所以编译时没有问题。
如果你输入的数字大于short的最大数,则编译会出问题。

而整数的转换是从 int 想 long ,所以一般没问题。
而浮点的转换是从 double 向 float ,所以出现了问题。


fdar 2008-07-14
  • 打赏
  • 举报
回复
java运算有个规律就是非浮点的都是以int运算
浮点都是以double运算
马老虎 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhj92lxs 的回复:]
大家不要被他骗了,他不接贴的
[/Quote]

不结贴 就不结吧!
反正学习了点!
zspsys 2008-07-14
  • 打赏
  • 举报
回复
float加f是为了和double类型区别的 short本来就属于整型,也没超出short的范围,所以它肯定不会报错了!
lord_is_layuping 2008-07-14
  • 打赏
  • 举报
回复
学习了。
sqq4290 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhj92lxs 的回复:]
大家不要被他骗了,他不接贴的
[/Quote]
学习了,顺便凑个热闹
bootupnow 2008-07-14
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 zhj92lxs 的回复:]
大家不要被他骗了,他不接贴的
[/Quote]
开始慢慢了解他了,hoho~
zhj92lxs 2008-07-14
  • 打赏
  • 举报
回复
大家不要被他骗了,他不接贴的
zhj92lxs 2008-07-14
  • 打赏
  • 举报
回复
学习了,呵呵
sagezk 2008-07-14
  • 打赏
  • 举报
回复
为什么 1 / 0 有错而 1 / 0.0 没有错?得到的是无穷。这不都是 0 么。
注意:0.0 是 double 类型常量,0 是 int 类型常量,1 / 0.0 要首先将 1 自动类型转换到 1.0 再完成浮点数相除计算结果自然是 double 类型的,而 double 类型变量按 IEEE754 标准可以取到三个特殊值即 NaN 正无穷 负无穷,所有可以。而 1 / 0 因为两边都是 int 型常量,所以是整除,而整除结果当然是 int 型整数,int 型变量无法表示和存储无穷这个特殊值,当然不可以,运行到这儿会抛 ArithmeticException 运行时异常。
sagezk 2008-07-14
  • 打赏
  • 举报
回复
整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
guoxyj 2008-07-14
  • 打赏
  • 举报
回复
还真有些难度
xql80329 2008-07-14
  • 打赏
  • 举报
回复
以前见到过. 现在又忘记了.
进来学习
helei123a 2008-07-14
  • 打赏
  • 举报
回复
学习
cexo821 2008-07-14
  • 打赏
  • 举报
回复
1/0就不有说了吧...呵呵
加载更多回复(17)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧