黑马程序员技术交流社区

标题: 关于对象空间开辟 [打印本页]

作者: up_    时间: 2012-10-25 18:17
标题: 关于对象空间开辟
定义一个数组空间,长度最大可以定义大多大,
如下代码
byte[] b=new byte[100000000000];//为什么这样写就报错
byte[] b=new byte[(int)100000000000l];
Object obj=new Object();//这样一句话默认在堆内存开辟多大空间。
作者: 程杰    时间: 2012-10-25 18:23
我觉的其实他返回的是int类型所有,数组大小根据int订的,int类型的大小事-2147483648   到2147483648 。所以你那个会报错
作者: 王禹衡    时间: 2012-10-25 18:41
数据定义的长度跟你系统栈的大小有关系,你的问题楼上说的很对,是因为int的原因。。
一个空Object对象的大小是8byte,而Object ob = new Object();
所占的空间为:4byte+8byte。4byte是Java栈中保存引用的所需要的空间。
而那8byte则是Java堆中对象的信息。
因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。


作者: 付维翔    时间: 2012-10-25 18:48
第一行代码错误,是超出了数组的长度的范围,最大长度为Integer.MAX_VALUE(2147483647),而第二行为什么不出错呢,是因采用了强制类型转换,[(int)100000000000l,使数组长度在规定的范围内,不会出数组越界的行为。




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