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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎志文 中级黑马   /  2013-5-25 07:39  /  2009 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

惭愧,最近才开始看毕老师的基础视频,心中一直有个小小的问题在纠结:整数默认为int型,小数默认为double型,为何 byte x = 1可以,而float y = 3.14却会报错?
视频里面讲,系统会自动判断1是否在byte类型范围里面,那为何系统不能判断3.14是否在float类型范围里面? 不知道有木有其他同学和我有过类似的疑问,求教。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
3.14是一个实数常量,实数常量默认为double类型。所以,将一个实数常量赋值给一个float类型时,要么强转成float
要么在实数常量后面添加'F",如下例子:

  1.                 //3.14是float类型的常量
  2.                 float y = 3.14F;
  3.                 //强转为float类型
  4.                 float x = (float) 3.14;
复制代码
整数常量默认为int类型,但是和float不同的是:可将整数类型常量直接赋值给byteshortchar的类型变量,只要不超出其表示的范围。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
float是单精度的,double是双精度的,    java不能把一个双精度的值赋给单精度的变量。除非要强转。float y=(float)3.14;   
会报错Type   mismatch    :count  convert from   double to float

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
道理其实挺简单,你不在3.14后面加f,那么3.14会被默认为double类型。
double占8个字节,float只占4个字节。
float容纳不了8字节的数据。除非强制转换。
温馨提醒:以后给float变量赋值,后面一定要加f。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黄炳期 发表于 2013-5-25 09:50
道理其实挺简单,你不在3.14后面加f,那么3.14会被默认为double类型。
double占8个字节,float只占4个字节 ...

可以了
回复 使用道具 举报
袁梦希 发表于 2013-5-25 12:08
可以了

非常感谢!!!辛苦了啊
回复 使用道具 举报
杨青 中级黑马 2013-5-25 23:48:52
7#
f表示这个数是单精度的。而不是双精度的。小数默认是用双精度存储的(double),这样, 如果是float类型的话 系统会强制做一次转换将double->float类型。而加上f的话直接以float类型存储。赋值时就不用转换了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马