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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殷婷婷 中级黑马   /  2013-9-29 15:54  /  2048 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天把原来的复习了下,发现
float f = 2.3;//这句编译不通过,原因我也明白。但是再写
byte b = 2;//居然编译通过,这是为什么呢,两者有什么区别呢?

9 个回复

倒序浏览

只要赋值数据在byte值范围0-255内,数据类型都会从int隐式转换为byte。因为0-255的整数都可以看做常量,不会改变,并且在byte的值范围内,这才发生隐式转换。如果赋值数据是变量,即使运算值是0-255之间的整数,也会报错。
至于为什么int会隐式转换为byte,我想是因为更好的使用内存吧。
回复 使用道具 举报
第一个问题,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码值,输出显示的时候再去根据码表“翻译出来”。

评分

参与人数 1黑马币 +9 收起 理由
黄文伯 + 9 赞一个!

查看全部评分

回复 使用道具 举报
黑色海 发表于 2013-9-29 18:34
只要赋值数据在byte值范围0-255内,数据类型都会从int隐式转换为byte。因为0-255的整数都可以看做常量,不 ...

谢谢,有点明白了{:soso_e128:}
回复 使用道具 举报
给变量赋值都要在变量数据类型的范围之内,而小数默认是double类型的,如果要将其指定为float那么就在值后面加上"f"就行了。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
小数默认是double的双精度嘛,float是浮点型。Java只能向上转型,向下要强转的。在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double 简单数据类型之间的转换又可以分为:低级到高级的自动类型、转换高级到低级的强制类型转换、包装类过渡类型能够转换

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
小数默认是double的双精度嘛,float是浮点型。Java只能向上转型,向下要强转的。在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double 简单数据类型之间的转换又可以分为:低级到高级的自动类型、转换高级到低级的强制类型转换、包装类过渡类型能够转换
回复 使用道具 举报
byte 类型是-128-127,不是0-255,因此当你把-128-127赋给byte类型的时候,编译可以通过,超过了就会出错byte b =2  ; (编译通过)
byte b=128; (编译不通过)

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


回复 使用道具 举报
在java中,所有的整数默认都是int类型的,所有的小数默认都是double类型的。
所以float类型在初始化是要显式的指定其类型,如float f = 2.3f;
byte b = 2;对于范围小于int的整数类型,java会检查其数据会不会超出接收变量的范围,如果不会则赋值,如果会则报错,如byte b=128;

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。 以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马