黑马程序员技术交流社区

标题: 关于数据类型的问题 [打印本页]

作者: 殷婷婷    时间: 2013-9-29 15:54
标题: 关于数据类型的问题
今天把原来的复习了下,发现
float f = 2.3;//这句编译不通过,原因我也明白。但是再写
byte b = 2;//居然编译通过,这是为什么呢,两者有什么区别呢?
作者: 黑色海    时间: 2013-9-29 18:34

只要赋值数据在byte值范围0-255内,数据类型都会从int隐式转换为byte。因为0-255的整数都可以看做常量,不会改变,并且在byte的值范围内,这才发生隐式转换。如果赋值数据是变量,即使运算值是0-255之间的整数,也会报错。
至于为什么int会隐式转换为byte,我想是因为更好的使用内存吧。
作者: 王清华0    时间: 2013-9-29 21:39
第一个问题,java中小数默认为是double类型的,也就是说,你写一个常量:2.3,java会默认开辟一个double类型的空间,当你要将这个值传给float的话,就成了向下转型,是无法默认转型的,需要强制明转。或者是一开始定义好2.3为float的类型的常量,需要在float后面加一个字母 f 来标志。如下代码都是可以的:
  1. float f1 = (float) 2.3;
  2. float f2 = 2.3f
复制代码
第二个问题,char类型默认是有值的,其值与ASCII码值对应。char的赋值范围为0-65535,所以你将常量5赋值给char之后,char会默认为是给予了它一个ASCII码值,而它实际上存储的也是ASCII码值,输出显示的时候再去根据码表“翻译出来”。
作者: 殷婷婷    时间: 2013-10-1 09:29
黑色海 发表于 2013-9-29 18:34
只要赋值数据在byte值范围0-255内,数据类型都会从int隐式转换为byte。因为0-255的整数都可以看做常量,不 ...

谢谢,有点明白了{:soso_e128:}

作者: 王飚    时间: 2013-10-2 11:42
给变量赋值都要在变量数据类型的范围之内,而小数默认是double类型的,如果要将其指定为float那么就在值后面加上"f"就行了。
作者: kangxiaoning    时间: 2013-10-2 13:57
小数默认是double的双精度嘛,float是浮点型。Java只能向上转型,向下要强转的。在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double 简单数据类型之间的转换又可以分为:低级到高级的自动类型、转换高级到低级的强制类型转换、包装类过渡类型能够转换
作者: kangxiaoning    时间: 2013-10-2 13:58
小数默认是double的双精度嘛,float是浮点型。Java只能向上转型,向下要强转的。在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double 简单数据类型之间的转换又可以分为:低级到高级的自动类型、转换高级到低级的强制类型转换、包装类过渡类型能够转换
作者: murder_fol    时间: 2013-10-4 10:09
byte 类型是-128-127,不是0-255,因此当你把-128-127赋给byte类型的时候,编译可以通过,超过了就会出错byte b =2  ; (编译通过)
byte b=128; (编译不通过)

float  a =2.3  编译不能通过,因为浮点默认是double,可能你会认为2.3很小,但是对于浮点数就不是大小问题了,而是精度问题了
我觉得是跟浮点和整数表示成二进制形式有关,记住就行了



作者: Leo_yeung    时间: 2013-10-4 21:29
在java中,所有的整数默认都是int类型的,所有的小数默认都是double类型的。
所以float类型在初始化是要显式的指定其类型,如float f = 2.3f;
byte b = 2;对于范围小于int的整数类型,java会检查其数据会不会超出接收变量的范围,如果不会则赋值,如果会则报错,如byte b=128;
作者: 黄文伯    时间: 2013-10-4 21:57
亲,如问题已解决请将分类的“未解决”改为“已解决”。 以后的问题贴也要及时更改分类哦~




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