黑马程序员技术交流社区

标题: 关于float a=3.5和byte b=3 [打印本页]

作者: 李明    时间: 2011-12-11 13:36
标题: 关于float a=3.5和byte b=3
本帖最后由 李明 于 2011-12-12 13:30 编辑

        float t=3.5;//出错
        byte a=3;//却不出错,3不是int型吗?
        请大虾们解答一下。
作者: ◇半度微凉    时间: 2011-12-11 13:56
本帖最后由 ◇半度微凉 于 2011-12-11 13:59 编辑

float t=3.5;肯定是错误的啊!首先3.4数值常量默认情况下是double类型,如果赋值给f,那么就要进行数据类型转换,将由double转换成float类型,但是浮点型(float)常量数值默认是double类型的,而double类型的数据表示的范围要比float类型的数据表示范围要大,所以不能进行自动类型转换,只能强制转换,这时可以写成float f = (float)3.5;或者在3.5后面加上'f'或'F',即float f = 3.5f; 而第二个byte a=3中,因为byte和int之间可以相互进行隐式转换,所以byte已经自动转换成int了,所以不会报错!
作者: 李明    时间: 2011-12-11 14:06
◇半度微凉 发表于 2011-12-11 13:56
float t=3.5;肯定是错误的啊!首先3.4数值常量默认情况下是double类型,如果赋值给f,那么就要进行数据类型 ...

                int b=1;
                byte a=b;//为什么这个就会报错?
作者: 程传鹏    时间: 2011-12-11 14:09
float t=3.5;
  错误原因:3.4数值默认是double类型,t是float类型的,这两个类型在内存中点的字节数不同,如果赋值给t,那么就要进行数据类型转换,将由double转换成float类型,double类型的数据表示的范围要比float类型的数据表示范围要大,所以不能进行自动类型转换,只能强制转换,这时可以写成float f = (float)3.5;或者在3.5后面加上'f'或'F',即float f = 3.5f;
byte a=3
  之所以不会出错原因是:前面分析跟上述一个道理,但是 byte和int之间可以相互进行隐式转换,只要a=3中的3这个数在byte的数据范围内,就会进行隐式转换,所以3已经自动转换成byte了,所以不会报错!
   注意:是3转换成byte类型,而不是a转换成int类型,a的类型已定义好了,不会再变

作者: 李振元    时间: 2011-12-11 14:21
这是一个关于自动类型转换的问题,float不能自动转换为double,而byte可以自动转换为int。
简而言之:
自动类型转换可以从表示范围小的向表示范围大地转换, 比如:char,byte,short都自动转换为int
而从表示范围大的向表示范围小的转换就需要强制类型转换了,比如float t = 3.5L;
作者: ◇半度微凉    时间: 2011-12-11 14:23
李明 发表于 2011-12-11 14:06
int b=1;
                byte a=b;//为什么这个就会报错?

我上面说过了啊!byte a=3中,因为byte和int之间可以相互进行隐式转换,所以不会报错!哦!对,还有我刚才说错了一点,说反了,应该是3转换成byte了,不是byte转int!它们之间是隐式转换!
作者: 吴上储    时间: 2011-12-11 14:54
李明 发表于 2011-12-11 14:06
int b=1;
                byte a=b;//为什么这个就会报错?

int  b = 1; 是属于int类型的
a=b ;就是把b的值赋给a a也就成了int型
byte a=b; 就是说我这个a是byte型的 上面却被转成了int 类型 所以会报类型转换错误, 损失精度。
如果byte a= (byte)b; 就对了 可以理解为 告诉编译器 我不管损失不损失精度,后果我负责。




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