黑马程序员技术交流社区
标题:
byte 类型的问题?
[打印本页]
作者:
上杉
时间:
2014-6-5 12:15
标题:
byte 类型的问题?
看到有的同学问Byte b=10;
b=b+1;//编译不通过
b+=1;//编译通过
有人回答是1是int类型,所以b+1类型和byte不同,编译不通过,(我看有童鞋回答这样,毕老师教课的时候好像也是这样教的),但是我想问的是byte取值范围不是-128~127,按道理说1也可以算是byte类型啊,为什么1必须要算到int类型里呢?跪求回答,别笑话我啊!!!!:L
作者:
上杉
时间:
2014-6-5 12:16
自顶!!!:L
作者:
赵文豪
时间:
2014-6-5 12:37
byte占1字节=8bit,而int占4字节=32bit,32bit的数据不可能放进8bit里面,故需要类型转换,个人理解
作者:
小强9090
时间:
2014-6-5 13:01
帮顶!!!!
作者:
123_yaya
时间:
2014-6-5 13:09
感觉这没什么为什么可以的说的,人家设计的java语言就这样子,编译规则就是将1默认成int型。用人家的语言,就要遵循人家的规则吧。
作者:
Crystal静新
时间:
2014-6-5 14:01
在java中,如果你不特别明确的指定是什么类型的数据,凡整数都是默认为int类型,小数都是Double类型,所以1就是int类型的。在编程时,有时也要特别注意一默认值,有些你不写,但它其实还是已经写好了。
作者:
Solomon
时间:
2014-6-5 14:19
占的几个8位不同当然不能通过,毕老师视频里有啊!
作者:
夏季熬成了秋
时间:
2014-6-5 14:19
1在byte里面是可以存下,但是int里面也包含有1,int范围要比byte大,而我们经常用到的数据里面,在int范围内的数最多,所以java中把int作为了默认的整数类型.这就是为什么 问题里所述1为什么算到int的原因.它是java默认,在编写java时候 规定的.
作者:
心灵的微幸福
时间:
2014-6-5 16:34
数字默认是整形,式子中目标类型小于源类型,所以要进行强制转换。才可以编译通过。
作者:
woshihq
时间:
2014-6-5 18:23
我也经常出现这类错误
作者:
、海
时间:
2014-6-5 18:48
1是int类型在内存中用二进制32位数表示例如int 类型1二进制表示是0000-0000 0000-0000 0000-0000 0000-0001,Byte类型则是二进制8位数 Byte 10为0000-1010 ,而如果Byte类型的10加上int类型的1时,系统会强制将byte类型转换为int类型即:0000-1010转换为 0000-0000 0000-0000 0000-0000 0000-1010 所以b+1为int类型,所以报错。你可以这样写b = (Byte)(b+1)这样将b+1强制转换为Byte类型。
作者:
GoodBoy123
时间:
2014-6-5 19:02
b=b+1这个呢就需要手动去转换)
b+=1(这个有默认的类型转换成byte)
作者:
yang1352546
时间:
2014-6-5 20:13
java将1默认为INT 类型的了,在计算时候b+1自动给转换为了INT型的,也就是自动类型提升。而b+=1会依然是byte不会进行类型提升, 另外好要注意的就是byte,short,char,进行运算时,都会发生自动的类型提升,比如 定义byte a = 1; byte b = 2; byte c = a +b ,也会报错,因为这里的c是需要INT的,或者将a+b强转为byte 格式0是 byte c = (byte)(a+b) 就不会失败。
作者:
许志康
时间:
2014-11-26 21:49
需要强制转换,哥们基础视频没好好看吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2