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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何丛 中级黑马   /  2013-11-12 09:55  /  2093 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java中整数类型默认为int,小数类型默认为double
那么byte b = 9;        9为int类型,为什么赋值给byte不保错?
如果jvm会为它进行强制类型转换,那么float f = 5.5;会报错?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 淡定

查看全部评分

15 个回复

倒序浏览
本帖最后由 ☆╰學不会☆╮ 于 2013-11-12 10:27 编辑

lz理解错了吧
byte b=9; 就是把9赋值给b的 9就是byte类型了啊
至于说的 整数类型默认为int 就是说 定义一个没有数据类型的变量 a=9; 那么a默认的数据类型是int类型
或者是  byte b=9;   byte b1=b+10; 这样的话编译会出错 因为10默认的类型是int型的  和byte类型的相加再赋值给byte 需要强转 byte b1=(byte)(b+10);

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报 1 1
5.5在机器中是被定义为double类型的,所以报错
回复 使用道具 举报
本帖最后由 不抛弃不放弃 于 2013-11-12 10:23 编辑

首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位)
这要考虑范围的,java编译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了
浮点型默认为double,不是默认的要在后面加上类型标识
回复 使用道具 举报
☆╰學不会☆╮ 发表于 2013-11-12 10:21
lz理解错了吧
byte b=9; 就是把9赋值给b的 9就是byte类型了啊
至于说的 整数类型默认为int 就是说 定义一 ...

说的对啊!
回复 使用道具 举报
整形分为四种类型,byte,short,int,long,    byte也是整数类型,只不过他是以一个八位来存储的。写byte b=9和int b=9 都没错
回复 使用道具 举报
bpsend 中级黑马 2013-11-12 15:36:45
7#
说说我的理解吧,说错了别打我。int类型是32个位,转换为byte直接把8位后面的裁掉就可以了。但是浮点数并不是这么存储的,它分为指数区啊,还有什么区的,不好转的原因吧。
回复 使用道具 举报
何丛 中级黑马 2013-11-12 15:49:15
8#
bpsend 发表于 2013-11-12 15:36
说说我的理解吧,说错了别打我。int类型是32个位,转换为byte直接把8位后面的裁掉就可以了。但是浮点数并不 ...

我不太赞成你的看法,byte b = 450;也会报错

点评

因为 byte类型 是8位的 只能在-128到127之间取值 超出当然会报错  发表于 2013-11-12 16:06
回复 使用道具 举报
何丛 发表于 2013-11-12 15:49
我不太赞成你的看法,byte b = 450;也会报错

因为 byte类型 是8位的 只能在-128到127之间取值 超出当然会报错
回复 使用道具 举报
何丛 中级黑马 2013-11-12 16:15:09
10#
☆╰學不会☆╮ 发表于 2013-11-12 10:21
lz理解错了吧
byte b=9; 就是把9赋值给b的 9就是byte类型了啊
至于说的 整数类型默认为int 就是说 定义一 ...

10默认是int,难道9就不是吗?
5.0不是在float的范围内吗?为什么它不能编译通过?
回复 使用道具 举报
何丛 中级黑马 2013-11-12 16:17:19
11#
wjj410830911 发表于 2013-11-12 16:07
因为 byte类型 是8位的 只能在-128到127之间取值 超出当然会报错

你自己说的“直接提取后8位”
回复 使用道具 举报
何丛 发表于 2013-11-12 16:15
10默认是int,难道9就不是吗?
5.0不是在float的范围内吗?为什么它不能编译通过? ...

捉急死了 这么容易还不理解吗。
byte a=10 ; 这个时候定义的a 已经将10转化成byte类型的了 赋值给a了。
byte b=a+100;  这个时候100没有定义数据类型 默认的是int类型
int a1=100;     byte b=a+a1;和byte b=a+100;定义的一样 只是如果不给100定义变量 它默认整数为int类型
byte b=a+a1; a1是int类型的和byte a 相加肯定会出错 所以要强转 byte b=(byte)(a+a1);

5.0确实在float单精度浮点型的取值范围内 但是java中就是强制规定的 如果定义float 必须要在变量后加上f
float f=5.0f; 不加f就是会出错 这是规定 没有为什么。。
回复 使用道具 举报
何丛 发表于 2013-11-12 16:15
10默认是int,难道9就不是吗?
5.0不是在float的范围内吗?为什么它不能编译通过? ...

捉急死了 这么容易还不理解吗。
byte a=10 ; 这个时候定义的a 已经将10转化成byte类型的了 赋值给a了。
byte b=a+100;  这个时候100没有定义数据类型 默认的是int类型
int a1=100;     byte b=a+a1;和byte b=a+100;定义的一样 只是如果不给100定义变量 它默认整数为int类型
byte b=a+a1; a1是int类型的和byte a 相加肯定会出错 所以要强转 byte b=(byte)(a+a1);

5.0确实在float单精度浮点型的取值范围内 但是java中就是强制规定的 如果定义float 必须要在变量后加上f
float f=5.0f; 不加f就是会出错 这是规定 没有为什么。。
回复 使用道具 举报
帖子已分类,若仍有疑惑,可重新提问
回复 使用道具 举报
bpsend 中级黑马 2013-11-12 17:53:04
15#
何丛 发表于 2013-11-12 16:17
你自己说的“直接提取后8位”

好吧,你问老师了吗?我当时问老师了,也是没弄懂,也没好意思继续问了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马