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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 上杉 中级黑马   /  2014-6-5 12:15  /  1930 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到有的同学问Byte b=10;
b=b+1;//编译不通过
b+=1;//编译通过
有人回答是1是int类型,所以b+1类型和byte不同,编译不通过,(我看有童鞋回答这样,毕老师教课的时候好像也是这样教的),但是我想问的是byte取值范围不是-128~127,按道理说1也可以算是byte类型啊,为什么1必须要算到int类型里呢?跪求回答,别笑话我啊!!!!:L

13 个回复

倒序浏览
自顶!!!:L
回复 使用道具 举报
byte占1字节=8bit,而int占4字节=32bit,32bit的数据不可能放进8bit里面,故需要类型转换,个人理解
回复 使用道具 举报 1 0
帮顶!!!!
回复 使用道具 举报
感觉这没什么为什么可以的说的,人家设计的java语言就这样子,编译规则就是将1默认成int型。用人家的语言,就要遵循人家的规则吧。
回复 使用道具 举报
在java中,如果你不特别明确的指定是什么类型的数据,凡整数都是默认为int类型,小数都是Double类型,所以1就是int类型的。在编程时,有时也要特别注意一默认值,有些你不写,但它其实还是已经写好了。
回复 使用道具 举报 1 0
占的几个8位不同当然不能通过,毕老师视频里有啊!
回复 使用道具 举报
1在byte里面是可以存下,但是int里面也包含有1,int范围要比byte大,而我们经常用到的数据里面,在int范围内的数最多,所以java中把int作为了默认的整数类型.这就是为什么 问题里所述1为什么算到int的原因.它是java默认,在编写java时候 规定的.
回复 使用道具 举报
数字默认是整形,式子中目标类型小于源类型,所以要进行强制转换。才可以编译通过。
回复 使用道具 举报
我也经常出现这类错误
回复 使用道具 举报
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类型。
回复 使用道具 举报
b=b+1这个呢就需要手动去转换)
b+=1(这个有默认的类型转换成byte)
回复 使用道具 举报
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) 就不会失败。
回复 使用道具 举报
需要强制转换,哥们基础视频没好好看吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马