黑马程序员技术交流社区

标题: 数据类型初始化值的问题 [打印本页]

作者: 黎志文    时间: 2013-5-25 07:39
标题: 数据类型初始化值的问题
惭愧,最近才开始看毕老师的基础视频,心中一直有个小小的问题在纠结:整数默认为int型,小数默认为double型,为何 byte x = 1可以,而float y = 3.14却会报错?
视频里面讲,系统会自动判断1是否在byte类型范围里面,那为何系统不能判断3.14是否在float类型范围里面? 不知道有木有其他同学和我有过类似的疑问,求教。
作者: student    时间: 2013-5-25 08:51
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的类型变量,只要不超出其表示的范围。
作者: 赵利斌    时间: 2013-5-25 09:15
float是单精度的,double是双精度的,    java不能把一个双精度的值赋给单精度的变量。除非要强转。float y=(float)3.14;   
会报错Type   mismatch    :count  convert from   double to float
作者: 黄炳期    时间: 2013-5-25 09:50
道理其实挺简单,你不在3.14后面加f,那么3.14会被默认为double类型。
double占8个字节,float只占4个字节。
float容纳不了8字节的数据。除非强制转换。
温馨提醒:以后给float变量赋值,后面一定要加f。
作者: 袁梦希    时间: 2013-5-25 12:08
黄炳期 发表于 2013-5-25 09:50
道理其实挺简单,你不在3.14后面加f,那么3.14会被默认为double类型。
double占8个字节,float只占4个字节 ...

可以了
作者: 黄炳期    时间: 2013-5-25 12:49
袁梦希 发表于 2013-5-25 12:08
可以了

非常感谢!!!辛苦了啊
作者: 杨青    时间: 2013-5-25 23:48
f表示这个数是单精度的。而不是双精度的。小数默认是用双精度存储的(double),这样, 如果是float类型的话 系统会强制做一次转换将double->float类型。而加上f的话直接以float类型存储。赋值时就不用转换了。




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