黑马程序员技术交流社区

标题: 请教一个关于int,long基本数据类型的问题 [打印本页]

作者: hbcoding    时间: 2015-10-24 16:59
标题: 请教一个关于int,long基本数据类型的问题
今天无意中发现一个问题,
  1. Long a = 1024*1024*1024*4;
  2. long b = 1024*1024*1024*4;
复制代码

以上第一行代码编译时会报错,输出第二行b的值是0,有些不理解,JDK1.5之后不是可以自动装箱吗?第一行代码的a为什么不可以自动装箱成Long?我用的JDK是1.8版本的。还有b的值为什么是0?long型长度不是8个字节吗?
      在网上查过了,int和long所占用的字节数是和编译器的位数相关的(有的也说是操作系统的位数,我用的操作系统是64位的),如果是和编译器的字长相关,那又如何知道编译器的字长?int和long的关系究竟是怎样的?求大神解答,感激不尽。


作者: longlostfriend    时间: 2015-10-24 16:59
都没加l,默认是存成int型
1,第一行 int 无法向上转换为 Long类型,与装箱没有关系
2,int型最大值是2^31-1,而你输入的是2^32,所以只取了左边的31位(全是零),然后java虚拟机在运行时,默认将int转成long,所以还是零。如果在后面加l就正常了。
作者: rookiefly    时间: 2015-10-24 18:17
本帖最后由 rookiefly 于 2015-10-24 18:21 编辑

第一行出错是因为 int 无法向上转换为 Long类型,与装箱没有关系,可以在任意数后边加一个l  eg:Long a = 1024*1024*1024*4l;  这时候会将int转为long装箱为Long   第二行值为0是因为超出了最大值范围,可以通过System.out.println(Long.MAX_VALUE);查看本机的long的最大值。另外,可以通过System.out.println(Long.SIZE)查看long值的位数。
作者: huangjunhui    时间: 2015-10-25 22:29
{:3_59:}{:3_59:}....路过
作者: 黑马公公007    时间: 2015-10-27 14:13
longlostfriend 发表于 2015-10-24 16:59
都没加l,默认是存成int型
1,第一行 int 无法向上转换为 Long类型,与装箱没有关系
2,int型最大值是2^31- ...

这也行?你不看楼上都被你气炸了
作者: 刘辰阳    时间: 2015-10-30 13:24
路过!!!!!!




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