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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 踏雪风暴 中级黑马   /  2014-6-23 11:29  /  2135 人查看  /  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 个回复

正序浏览
byte b = 3;
b = 3 + 4;
//b = b + 4;
System.out.println(b);

b=3+4 ; 先算右边3+4等于7,然后赋值给b .
回复 使用道具 举报
这么说吧,你觉得 byte b = 3 是对的吧 那么你觉得byte b = 3+4和 b = 3 有区别么不就是byte b = 7么
回复 使用道具 举报
1.6以后就自动装箱拆箱吗?学习了!
回复 使用道具 举报
装箱 拆箱什么意思?是数据类型的自动转换吗
回复 使用道具 举报
学习              
回复 使用道具 举报
踏雪风暴 发表于 2014-6-23 12:59
那我想问下 这样的情况 都有哪些类型  是针对基本数据类型吗?? 我先支持你一下 ...

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

评分

参与人数 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

查看全部评分

回复 使用道具 举报
3  4都是常量  只要不超过byte的范围就不会错 第三行的B是变量 想加会提升类型

评分

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

查看全部评分

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

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

那我想问下 这样的情况 都有哪些类型  是针对基本数据类型吗?? 我先支持你一下
回复 使用道具 举报
踏雪风暴 发表于 2014-6-23 11:56
b=3+4    右边的不是 int  吗  ,两边的类型不同  会缩小精度  编译应该出问题吧  所以不明白为何  为7  ...

int 可以转换成byte类型 1.6以后自动装箱拆箱
回复 使用道具 举报 1 0
本帖最后由 踏雪风暴 于 2014-6-23 11:57 编辑
会说话的木头 发表于 2014-6-23 11:35
你把b=b+4注释掉了,b=3+4,执行了结果当然是7

b=3+4    右边的不是 int  吗  ,两边的类型不同  会缩小精度  编译应该出问题吧  所以不明白为何  为7
回复 使用道具 举报
你把b=b+4注释掉了,b=3+4,执行了结果当然是7
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马