黑马程序员技术交流社区
标题:
运算类型转换
[打印本页]
作者:
韩明海
时间:
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