java --数组内存分配等问题

来源:互联网 发布:sql注入在线检测 编辑:程序博客网 时间:2024/03/28 18:50

在java中,声明一个数组过程中,是如何分配内存的?

1.当声明数组类型变量时,为其分配了(32位)引用空间,由于未赋值,因此并不指向任何对象;

2.当创建了一个数组对象(也就是new出来的)并将其地址赋值给了变量,其中创建出来的那几个数组元素相当于引用类型变量,因此各自占用(32位的)引用空间并按其默认初始化规则被赋值为null

3.程序继续运行,当创建新的对象并(将其地址)赋值给各数组元素,此时堆内存就会有值了


Java变量一定要初始化吗?

不一定。Java数组变量是引用数据类型变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,即可使用该数组变量。对数组执行初始化,并不是对数组变量进行初始化,而是对数组对象进行初始化——也就是为该数组对象分配一块连续的内存空间,这块连续的内存空间就是数组的长度。


基本类型变量都放在栈内存中?

错。应该这样说:所有局部变量都放在栈内存里保存的,不管其是基本类型的变量,还是引用类型变量,都是存储在各自的方法栈区中;但是引用类型变量所引用的对象(包括数组、普通java对象)则总是存储在堆内存中。


引用变量何时只是栈内存中的变量本身,何时又变为引用实例的java对象?

引用变量本质上只是一个指针,只要程序通过引用变量访问属性,或者通过引用变量来调用方法,该引用变量将会由他所引用的对象代替。


转载自:http://blog.csdn.net/u011263966/article/details/18924043

原创粉丝点击