黑马程序员技术交流社区

标题: 运算类型转换 [打印本页]

作者: 韩明海    时间: 2013-6-29 22:29
标题: 运算类型转换
本帖最后由 孙百鑫 于 2013-7-1 07:58 编辑

请帮忙解释一下
byte b = 1+1;
为什么可以编译并运行,这里的1不是 int 型么?
作者: 秩宇    时间: 2013-6-29 23:44
int占四个字节 byte占一个字节,在转换的时候 int会扔掉前三个字节的信息,而这里是先运算再赋值,就是说把2赋值给一个byte类型,因为byte存储的范围是-128到127,所以可以转换。
作者: 万琪    时间: 2013-6-30 00:44
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

作者: 贾永长    时间: 2013-6-30 00:53
int虽然精度比byte高、看似1+1需要强制转换才能赋值给byte类型的b。
但是,
有一种特殊情况:一个整数变量赋给byte short int char时,只要不超过他们的范围,都可以不用强制转换。
这里的1+1是2,而b的范围是-128~127 当然可以byte b=1+1;{:soso_e130:}
作者: 孙百鑫    时间: 2013-7-1 07:56
帖子解决。请及时联系版主改成已解决。不然会漏分的哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2