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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up_ 中级黑马   /  2012-10-25 18:17  /  1631 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个数组空间,长度最大可以定义大多大,
如下代码
byte[] b=new byte[100000000000];//为什么这样写就报错
byte[] b=new byte[(int)100000000000l];
Object obj=new Object();//这样一句话默认在堆内存开辟多大空间。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

3 个回复

倒序浏览
我觉的其实他返回的是int类型所有,数组大小根据int订的,int类型的大小事-2147483648   到2147483648 。所以你那个会报错

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
数据定义的长度跟你系统栈的大小有关系,你的问题楼上说的很对,是因为int的原因。。
一个空Object对象的大小是8byte,而Object ob = new Object();
所占的空间为:4byte+8byte。4byte是Java栈中保存引用的所需要的空间。
而那8byte则是Java堆中对象的信息。
因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
第一行代码错误,是超出了数组的长度的范围,最大长度为Integer.MAX_VALUE(2147483647),而第二行为什么不出错呢,是因采用了强制类型转换,[(int)100000000000l,使数组长度在规定的范围内,不会出数组越界的行为。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马