黑马程序员技术交流社区

标题: Java小问题求解 [打印本页]

作者: 何丛    时间: 2013-11-12 09:55
标题: Java小问题求解
Java中整数类型默认为int,小数类型默认为double
那么byte b = 9;        9为int类型,为什么赋值给byte不保错?
如果jvm会为它进行强制类型转换,那么float f = 5.5;会报错?


作者: ☆╰學不会☆╮    时间: 2013-11-12 10:21
本帖最后由 ☆╰學不会☆╮ 于 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);
作者: Θ动@咚Θ    时间: 2013-11-12 10:21
5.5在机器中是被定义为double类型的,所以报错
作者: 不抛弃不放弃    时间: 2013-11-12 10:22
本帖最后由 不抛弃不放弃 于 2013-11-12 10:23 编辑

首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位)
这要考虑范围的,java编译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了
浮点型默认为double,不是默认的要在后面加上类型标识

作者: Faner    时间: 2013-11-12 10:31
☆╰學不会☆╮ 发表于 2013-11-12 10:21
lz理解错了吧
byte b=9; 就是把9赋值给b的 9就是byte类型了啊
至于说的 整数类型默认为int 就是说 定义一 ...

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

我不太赞成你的看法,byte b = 450;也会报错
作者: wjj410830911    时间: 2013-11-12 16:07
何丛 发表于 2013-11-12 15:49
我不太赞成你的看法,byte b = 450;也会报错

因为 byte类型 是8位的 只能在-128到127之间取值 超出当然会报错
作者: 何丛    时间: 2013-11-12 16:15
☆╰學不会☆╮ 发表于 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
wjj410830911 发表于 2013-11-12 16:07
因为 byte类型 是8位的 只能在-128到127之间取值 超出当然会报错

你自己说的“直接提取后8位”
作者: ☆╰學不会☆╮    时间: 2013-11-12 16:51
何丛 发表于 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:52
何丛 发表于 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 17:23
帖子已分类,若仍有疑惑,可重新提问
作者: bpsend    时间: 2013-11-12 17:53
何丛 发表于 2013-11-12 16:17
你自己说的“直接提取后8位”

好吧,你问老师了吗?我当时问老师了,也是没弄懂,也没好意思继续问了。




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