java中创建数组时内存怎么分配????

问题描述

java中创建数组时内存怎么分配????

int[] arr=new int[3];

问题: 上面创建int数组时,怎么分配内存的?arr是一个引用变量,是通过指针指向new int[3](存在堆里面)对吧,那么,栈里面为arr分配几个指针,是3个还是1个?

补充:

疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?

疑问2****: 如果是一个,那么,这个指正指向谁????

疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????

疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(实例对象数组的元素在元素创建时可是null的,对吧。而且在数组使用过程中数组元素指向的对象是可以变的,这不就意味着内存在变吗!!)

综合上述:我觉得数组创建时(我指的是被new出来时),栈中会为数组创建数组长度个指针分别指向每个元素。

但是,问题又来了。

问题5****:

int[] arr;//这里分配几个指针(栈)??

arr=new int[3];

还请大神来解答我的疑惑,能解答一个是一个。。。谢谢。。

解决方案

疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是“数组长度”个?
栈中为arr分配一个存储单位,存储的是指向一个新创建的数组的引用
疑问2****: 如果是一个,那么,这个指正指向谁????
指向数组对象
疑问3****: 如果指向的是第一个元素,那么,该指针怎么索引数组的其它元素????
指向数组对象,数组对象包含它的长度,和C++不同,这是引用,不是指针
疑问4****: 如果疑问3中索引方式是通过指针值加上数组元素所占内存大小的来索引下一个元素,那么,当元素不是基本数据类型,而是摸个对象的实例时,又是怎么索引的???(
那很简单,就是指向数组对象,当你通过数组+索引访问元素的时候,得到的对象的引用,再指向真正的对象
问题5****:
int[] arr;//这里分配几个指针(栈)??
arr=new int[3];
这里第一行定义了一个数组对象的引用,叫arr,但是不指向任何对象
new int[3]创建了一个三个元素的数组对象,并且让arr指向它

时间: 2024-07-28 16:18:26

java中创建数组时内存怎么分配????的相关文章

lucene-WEB开发中Lucene创建索引时内存溢出

问题描述 WEB开发中Lucene创建索引时内存溢出 在查询数据库后创建索引过程中出现内存溢出,通过辅助软件查看,发现是很多的实体被占用没有被释放,导致堆内存溢出,是否有人遇到这种情况,如何解决? PS:增大JVM的堆内存,这种方式无效,因为实体越来越大,总会溢出. 解决方案 既然是web开发,为什么不分页操作呢

详解Java中的数组与字符串相关知识_java

Java数组的定义和使用 如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量.例如: int demoArray[]; int[] demoArray; 这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择

java中的数组类型的数据能存储到栈空间吗

问题描述 java中的数组类型的数据能存储到栈空间吗 我们知道堆空间存储大数据,栈空间的数据先进后出, java中的数组类型的数据能存储到栈空间吗 解决方案 基本类型产生了一个值存放在栈中,变量的值就是栈的地址处的值. 引用类型则产生了一个对象,存放在内存堆中,同时将内存堆对象的指针地址(引用地址)存放在了栈中,变量的值实际是栈中的引用地址. 解决方案二: java中所有对象和数组都是在堆上分配内存的,,栈内存用来存放局部变量 解决方案三: java 存储不同类型数据Java实现登录.注册(使用

js接收并转化Java中的数组对象的方法_javascript技巧

在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进行内容的转化,后来发现不可以,网上说js与java没有桥接的东西,所以呢: 我的解决方案是:在action层,将java的对象数组转化为Json串,而在js中,再把json转化为数组对象. 1.将java的对象数组转化为Json串: 要用到两个类: net.sf.json.JSONObject ne

Java中char数组(字符数组)与字符串String类型的转换方法_java

本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法.分享给大家供大家参考,具体如下: 在Java语言编程时,使用"口令字段"jPasswordField组件时,如果要获得密码值,就需要使用该组件的getPassword()方法.jPasswordField的getPassword()方法返回一个char类型的数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作.这时,就需要将char类型的数组进行转换.当然也经常会遇到

* java 中的数组 对象数组 以及main方法中的参数 x y不用中间参数实现交换

 /*  java 中的数组  对象数组   以及main方法中的参数    x y不用中间参数实现交换java 基本数据类型 的数组 初始化元素为 0java中数组名.length表示数组中元素的个数 main方法中的 args[] 从0开始 是java 类  后面的字符串  args.length也是保存了 元素的个数 System.out.println()  在打印对象的时候 包括我们自己定义的对象 他会调用toString方法 因为所有类都是从object派生而来  打印出类测描述建议

Java中new DerivedClass()时背后发生的事情

Java中new DerivedClass()时背后发生的事情 (原创 – 邵正军, 2005-4-5)   class DerivedClass extends BaseClass {-} new DerivedClass();   1           装载class 1.1          载入BaseClass , 产生了此处说明的序列步骤(即: [装载class])的递归. 1.2          载入DerivedClass 1.2.1     为类作用域变量分配存储空间,并赋

java中String数组问题,String[3][2]是表示有6个对象吗?

问题描述 java中String数组问题,String[3][2]是表示有6个对象吗? String[ ][ ] zhuangtai=new String[3][2]; 是表示有6种不同的状态吗,如何理解呢?新手提问,莫见笑 解决方案 上面的错了,应该都是从00开始 这是一个二维数字,里面可以存储6个属性 分别为[0][0] [0][1] [1][0] [1][1] [2][0] [2][1] 你可以看下我这篇文章http://blog.csdn.net/zhanggang740/article

关于java中消除数组中的重复值的问题,麻烦大家了

问题描述 关于java中消除数组中的重复值的问题,麻烦大家了 public static void getLength(int[] arr){ int count=0; int i; for(i=0;i<arr.length-1;i++){ if(arr[i]==arr[i+1]) count++; arr[i]=arr[i+1]; } for(int x=0;x<arr.length-count-1;x++){ System.out.print(arr[x]+" ");