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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 踏雪风暴 中级黑马   /  2014-6-23 11:29  /  2325 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 踏雪风暴 于 2014-6-24 10:26 编辑

byte b = 3;
b = 3 + 4;
//b = b + 4;
System.out.println(b);
我知道第三句是错的,但我也认为第二句也是错的,是整数赋值给了  byte 所以错的 ,
但是结果为什么能打出来呢,  值为 7  求解答

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

18 个回复

倒序浏览
你把b=b+4注释掉了,b=3+4,执行了结果当然是7
回复 使用道具 举报
本帖最后由 踏雪风暴 于 2014-6-23 11:57 编辑
会说话的木头 发表于 2014-6-23 11:35
你把b=b+4注释掉了,b=3+4,执行了结果当然是7

b=3+4    右边的不是 int  吗  ,两边的类型不同  会缩小精度  编译应该出问题吧  所以不明白为何  为7
回复 使用道具 举报
踏雪风暴 发表于 2014-6-23 11:56
b=3+4    右边的不是 int  吗  ,两边的类型不同  会缩小精度  编译应该出问题吧  所以不明白为何  为7  ...

int 可以转换成byte类型 1.6以后自动装箱拆箱
回复 使用道具 举报 1 0
会说话的木头 发表于 2014-6-23 12:47
int 可以转换成byte类型 1.6以后自动装箱拆箱

那我想问下 这样的情况 都有哪些类型  是针对基本数据类型吗?? 我先支持你一下
回复 使用道具 举报
会说话的木头 发表于 2014-6-23 12:47
int 可以转换成byte类型 1.6以后自动装箱拆箱

1.6以后就自动装箱拆箱吗?学习了!
回复 使用道具 举报
3  4都是常量  只要不超过byte的范围就不会错 第三行的B是变量 想加会提升类型

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
踏雪风暴 发表于 2014-6-23 12:59
那我想问下 这样的情况 都有哪些类型  是针对基本数据类型吗?? 我先支持你一下 ...

我不知道该怎么回答你,你先b=3+4;这肯定没问题,运算完赋值给b,byte占一个八位,int占4个八位,b=b+4;右边的b就被类型提升了,变成4个八位,b+4运算完就是4个八位,你把一个4个八位的结果赋给一个八位的b,肯定是不可以的!你先这样理解吧

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
alive 来自手机 中级黑马 2014-6-23 18:42:32
9#
自动装箱拆箱是对于基本数据类型包装类的,跟这些挨不上。b=3+4能通过是因为运算得到的int类型值7在byte的范围内,所以编译可以通过,而b=b+4中b是变量,大小不确定,运算后的值可能会超出byte的范围,编译器不能识别,所以编译报错

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
呵呵呵呵呵呵
回复 使用道具 举报
myeclipse10 的bug
回复 使用道具 举报
DirectoryDirectoryDirectory
回复 使用道具 举报
常量相加是先相加,然后判断是否溢出,变量相加先转换类型再相加
回复 使用道具 举报
踏雪风暴 发表于 2014-6-23 12:59
那我想问下 这样的情况 都有哪些类型  是针对基本数据类型吗?? 我先支持你一下 ...

基本数据类型就不存在装箱拆箱
回复 使用道具 举报
学习              
回复 使用道具 举报
装箱 拆箱什么意思?是数据类型的自动转换吗
回复 使用道具 举报
1.6以后就自动装箱拆箱吗?学习了!
回复 使用道具 举报
这么说吧,你觉得 byte b = 3 是对的吧 那么你觉得byte b = 3+4和 b = 3 有区别么不就是byte b = 7么
回复 使用道具 举报
byte b = 3;
b = 3 + 4;
//b = b + 4;
System.out.println(b);

b=3+4 ; 先算右边3+4等于7,然后赋值给b .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马