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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩明海 中级黑马   /  2013-6-29 22:29  /  1681 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-1 07:58 编辑

请帮忙解释一下
byte b = 1+1;
为什么可以编译并运行,这里的1不是 int 型么?

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

4 个回复

倒序浏览
秩宇 来自手机 中级黑马 2013-6-29 23:44:27
沙发
int占四个字节 byte占一个字节,在转换的时候 int会扔掉前三个字节的信息,而这里是先运算再赋值,就是说把2赋值给一个byte类型,因为byte存储的范围是-128到127,所以可以转换。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
byte不光=1+1哦,,
还=='a';
byte c = 'a';

这是因为Java的老外为了省内存(以前穷啊),就搞了个byte池,
把-128到127全部搞了单例设计,所以,,128到127的值都指向唯一对应的内存,,

噢啦,,所以什么int a = 1; 其实是byte b = 1; int a = b;,,,,在做自动`类型转换

而且,,后面你会看到,,,                       
Integer m = 127;
Integer n = 127;
System.out.println(m==n);//true

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

回复 使用道具 举报
int虽然精度比byte高、看似1+1需要强制转换才能赋值给byte类型的b。
但是,
有一种特殊情况:一个整数变量赋给byte short int char时,只要不超过他们的范围,都可以不用强制转换。
这里的1+1是2,而b的范围是-128~127 当然可以byte b=1+1;{:soso_e130:}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
帖子解决。请及时联系版主改成已解决。不然会漏分的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马