JAVA中数组定义new分配内存空间的问题

JAVA中在定义一个数组的时候,根据书上内容形式,举一个例子
int[] arr=new int[]{3,4,5,};
但是在实际中,我见到过或者使用更多的是
int[] arr={3,4,5};
这个时候要不要new去分配内存又有什么区别呢?
在JAVA中 是不是没有new 分配的时候 数组arr在内存栈中
new分配内存空间时 数组arr就到了堆内存中呢

6个回答

现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就初始化
而new是动态初始化 在运行的时候才初始化
数组里的数据一直都是在堆中的

我知道的是这个样子的:new int[]{3,4,5,};这个在堆中开辟了一个空间用于存放这个数组对象,内容是数据。然后int[] arr=new int[]{3,4,5,};这句话的得在第一句话的基础上说。意思就是先在栈中开辟一个空间,然后把new int[]{3,4,5,};所产生数组对象的地址存放到栈中开辟的空间中。
int[] arr={3,4,5};只开辟了一个空间,至于在栈中还是在堆中这个我也不确定,推断是在栈中。

现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就初始化
而new是动态初始化 在运行的时候才初始化
数组里的数据一直都是在堆中的

以上两种都是数组的静态初始化,区别是:

 第一种 new int[]{} 是放在堆区的,而arr是在栈区的,两者通过引用相互连接;
 第二种  直接在栈区的.

如果是大量的代码还是第二种运行比较快。

初始化数组的各种形式:第一种: int[]array=new int[3]; ("[ ]"中的3表示数组中元素的个数)
第二种: int[]array={1,2,5,3,2}; (当数组有确定的元素时,可以直接使用大括号,)

初始化数组的各种形式:第一种: int[]array=new int[3]; ("[ ]"中的3表示数组中元素的个数)
第二种: int[]array={1,2,5,3,2}; (当数组有确定的元素时,可以直接使用大括号,)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
new如何分配动态内存空间
如new BYTE[dSrcDataSize][4]rn中dSrcDataSize是个变量。rnrn这样分配不行,该如何实现?rnrn谢谢!rn
关于使用new void*[]分配内存空间的问题?
void **a=new void*[5];rn我想请问下此时new 是怎么分配内存空间的,分配的有多少,是连续的吗?rn请高手指点指点...rn求解中...
java内存空间的分配
-
如何分配一个数组的内存空间?
我在程序中定义了一个数组,是不是要先定义了它的内存空间才可以用?rn数组的大小可以去态分配吗?rn谢谢了!
分配内存空间问题。
初始化时:head=(student*)malloc(sizeof(student)) ;rn然后从文件 LOAD 数据,用head指向头接点。rn操作后要判断head所指的记录是否存在。能用if(head=NULL)判断吗?rn还有head=(student*)malloc(sizeof(student)) 是分配堆空间,malloc 在 stdlib.h 或malloc.h 头文件中吗? 请大虾指教!!
分配内存空间
#include #include #Include> char *getstr(); int main() { char *p=NULL; p = getstr(); puts(p); free(p); return 0 ; } char *getstr() { char *str=NULL; str = (char * )malloc(sizeof(char)*5
内存空间的分配
在内存中,供用户使用的内存空间分为三部分 程序存储区 静态存储区 动态存储区 程序存储区 存放函数体的二进制代码,就是存放程序代码 程序中所用的数据,分别存放在静态存储区,动态存储区中 静态存储区 数据在程序的开始就分配好内存区,在整个程序执行过程中 它们所占的存储单元是固定的,在程序结束时就释放 因此,静态存储区数据一般为全局变量。 动态存储区 数据则是在程序执行...
在什么情况下使用new来分配内存空间?
RT
用new分配的数组和[]定义的数组有什么不同呢?
在一个类里面定义一个的数组(MEMBUFFER和LEVEL定义在类外面的结构体)rnprivate:rnint n;rnMEMBUFFER mem_buffer[10];rnLEVEL level[20];rn可以正常运行.rn但是改为rnprivate:rnint n;rnMEMBUFFER *mem_buffer;rnLEVEL level[20];rn在初始化函数里:rnmem_buffer=new MEMBUFFER[10];rn程序就不能正常运行,主要表现是:rnlevel[i].brec=mem_buffer[i].mb.brec;rn执行了这条语句后改变了n的值为mem_buffer[i].mb.brec;(我试了它总是改变定义在mem_buffer前面的变量)rn但是如果我把LEVEL level[20]放在定义的最前面,就没有这种现象了.rnprivate:rnLEVEL level[20];rnint n;rnMEMBUFFER *mem_buffer;rnrn我一开始编的时候直接定义了数组都好好的.现在想改为动态数组就出现了这样的问题,由于代码太长结构也比较复杂,所以不能把程序贴出来,请大家分析以下可能的原因!谢谢!rn
怎么样在java里分配内存空间
怎么样在java里分配内存空间rn如分配一个整型2个字节
关于new定义数组的问题?
程序段如下:rnunsigned long pTmpBm[hi*wid];rn//unsigned long *pTmpBm=new unsigned long[hi*wid];rn rn ........rn .......rnrn ::StretchDIBits(HTargetDC,rn 0, 0,rn dst_width, dst_height,rn 0, 0,rn src_width, src_height,rn pTmpBm,rn pbmi.get(),rn DIB_RGB_COLORS,rn SRCCOPY);rnrn// delete[] pTmpBm;rn数组这样unsigned long pTmpBm[hi*wid]就正常,rn若改为unsigned long *pTmpBm=new unsigned long[hi*wid]就不行?rnrn为什么,能解决吗?我还是想用动态分配的!!rn
java中数组可以使用new分配内存空间,也可以边声明边赋值.区别是什么
一:使用数组可以 1声明数组 int[ ]a;rn 2分配空间a=new int[3];rn 3赋值 a[0]=8;rn 4处理a[1]=a[0]*3;rn二:数组使用还可以边赋值边声明rneg:rn int [ ]score =11,12,23];rn在二中没有体现分配空间的问题,想知道一种分配空间的意义,初学者,求指导
Java内存空间,基本数据类型,数组
1.Java内存划分Java内存空间分为五个部分:堆,栈,方法区,本地方法区,寄存器。a. 寄存器:给CPU使用。 b. 本地方法区:和系统底层方法相关,比如Windows本地方法,native关键字修饰。 c. 栈内存:存储的都是局部变量(函数中定义的变量、函数上的形参、语句中的变量)。只要在方法中定义的变量都是局部变量。局部变量都有所属,属于某一方法。 一旦变量的生命周期结束,该变量就被释放。
如何分配未知长度的数组或者内存空间
是这样的,数组都是需要知道长度的,就算是动态数组,也需要知道动态分配的长度,而这里的情况是这样的,在一个循环体里,有判断比较,如果满足条件就把数据保存下来,不满足跳过下一步,所以整个数据的长度只有循环体结束了之后才会知道。首先,我不想直接定义一个很长的数组,其次,我不想执行两次循环,即不想先算出长度,在存储数据,而且,即使是连续两次new或者malloc,内存空间也应该不会是连续的,所以只要满足条件就new的做法是不对的,有人告诉我用链表或者vector,但是这个不是很懂,我想知道,用C或者数组能不能解决?求告知。。。
怎样给一个二维数组分配内存空间??
malloc
为什么数组分配的内存空间不连续??
代码如下:rnrn#includern#includernrnint main()rnrn int as[3]=10,20,30;rn int (*p)[3] = &as;rn int i;rn for (i=0;i<3;i++)rn rn printf("%p\n",p++);rn rn system("pause");rn return 0;rnrnrnrn[img=https://img-bbs.csdn.net/upload/201505/31/1433062292_107803.jpg][/img]rnrn不应该是每次增加4吗?
问一个用new分配数组的问题
#includernrnclass testrnrn public:rn test(int arg)rn rn m_arg=arg;rn rn ~test()rn rn rn int getarg()rn rn return m_arg;rn rn private:rn int m_arg;rn;rnrnint main()rnrn test *p=new test[5](1),(2),(3),(4),(5);rn for(test *q=p;qgetarg();rn rn delete []p;rn return 0;rnrnrn这段程序在编译的时候为什么在new 那一行会报错呀,请问各位怎么改正?
不同DLL中,分配和释放内存空间的问题。
这个问题有人问过,但是我还是不太清楚,所以我再问一下。rnrn我的主程序调用了一个DLL的函数,分配了一段空间。当不需要这段空间的时候我就在主程序中释放掉它。但是出问题了,每次程序运行,执行了这段程序6次的时候就在释放的时候出错。rnrn请问,为什么在DLL中分配的空间不能在主程序中释放?rnrn(注:我在DLL中添加了个释放空间的函数解决了这个问题了,但是不明白上边这个问题。)
全局变量分配内存空间问题求助
如果一个VC项目里面有几个源文件,其中只有一个入口点main函数,假如这几个源文件的开头都含有定义全局变量,那么编译的时候是先给所有源文件的全局变量分配内存空间,然后再进入入口点函数吗?rnrn我主要是不明白入口点函数源文件之外的源文件中对全局变量分配空间是在进入入口点函数之前还是之后。rnrn求大牛指点
Nucleus中任务内存空间的分配问题
rn 我的板子跑Nucleus,SDRAM 4M。有个任务TaskA现在需要malloc 256k的空间,发现添加完malloc(0x40000)这个后就不好使了,分配32K还可以,但是分64K 或者 128K 或者更大,就都有问题。我认为跟以下内容相关,如下理解的 不知道对不对:rn rn 1、NU_Create_Memory_Pool(&System_Memory, "SYSTEM",first_available_memory, [color=#993366]0x80000,[/color] 32, NU_FIFO); //获取系统内存,大小:0x80000(512k),用于以后creat task 的时候从这个里边分内存。rnrn 2、NU_Allocate_Memory(&System_Memory, (void *)&pointer,[color=#993366] 0x12000,[/color] NU_NO_SUSPEND); rn //从刚才的0x80000的空间分出0x12000的空间 给下边的任务TaskArnrn 3、NU_Create_Task(&A_Task, "Task", TaskA, 0, NU_NULL, pointer,[color=#993366] 0x12000,[/color]4, 0, NU_PREEMPT, NU_START); //创建TaskA的任务rnrn问题:rn 1、TaskA中需要使用256K的大小的动态内存,是不是NU_Create_Task的时候分的空间一定要[color=#993366]>256K ,<0x80000[/color] (NU_Create_Memory_Pool)。 我在TaskA中用的 malloc分内存,是不是占用的 任务A在NU_Create_Task时分配的那些空间。rn 2、简要描述3者的关系:系统内存池产生的内存空间、任务创建时的内存空间 、任务运行中动态分配的内存空间rnrn如果理解的有问题,请指出相应位置 ,多谢。
Linux内存空间的分配
1、Linux内存空间 a. Linux的内存空间有4G的进程地址空间,包括用户空间与内核空间。用户空间分配了3G,而内核空间分配了1G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程进行系统调用的情况下(代表用户进程在内核态执行),才能够访问到内核空间。 b.用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。而内核空间是由内核负责映射,它并不会
Java数组在内存中的分配
  Java数组在内存中的分配   在Java中,数组存储对象的原始值(int,char,...)或引用(也称为指针)。 使用“new”创建对象时,会在堆中分配一个内存空间并返回一个引用。对于数组也是如此,因为数组是Java中的对象。   1.单维数组 int arr[] = new int[3]; int [] arr只是对3整数数组的引用。如果创建一个包含10个整数的数组,则...
C++new分配内存空间
C++ 采用new来申请新的存储单元,定义一个指针变量a,type是类型名,[]表示需要n个tyoe类型长度的存储单元。 a=new type; a=new type[]; 与new相对的是收回内存单元delete delete a; delete []p;[]是删除多个type类型的存储单元。 int *a; a=new int; *a=15; delete a
引用是否分配内存空间?
一个关于引用的例子:rn[code=C/C++]rn#include rn#include rnusing namespace std; rn rnfloat c; rnfloat& test(float,float); rnvoid main(int argc,char* argv[]) rn rn float &pn=test(3.0f,1.2f); rn cout<
动态数组分配内存空间溢出
内存为512M,虚拟内存4095Mrn给几个动态数组用setlength分配空间,每个应该分配的空间在rn600M-1200M之间,总和大概3G左右,但是一分配就内存溢出,rn小一些的没问题,也没有超出4G的限制,何故?
变量分配的内存空间初值????
自学中的一道练习题..不懂..向各位大哥请教!!rnrnn1的地址为402000h,其他几个变量的地址是多少?按字节形式写出为这些变量分配的内存空间的初值.rnrnn1 db 5rnn2 db 123rnn3 db '123'rnn4 db 80,?,80 dup (0)rnn5 dw 1,2,3rnn6 dd 6,100rnn7 dd n3rnn8 dd n4rnn9 dd n4+2
内存空间为啥没分配
#include"iostream"rn#include"string.h"rnusing namespace std;rnconst int MAXSIZE=100;rntypedef structrnchar *top;rnchar *base;rnint stacksize;rnSqstack;rnint init(Sqstack &s)rn s.base=new char[MAXSIZE];rn if(!s.base) exit(-1);rn s.top=s.base;rn s.stacksize=MAXSIZE;rn return 0;rnrnint push(Sqstack &s,char e)rnif(s.top-s.base==s.stacksize)rnreturn -1;rn*s.top++=e;rnreturn 0;rnrnint pop(Sqstack &s,char &e)rnrnif(s.top==s.base)return 0;rne=*--s.top;rnreturn 0;rnrnvoid main()rnchar a[10],m;rnint l,i,tag=1;rnSqstack s;rngets(a);rnl=strlen(a);rnfor(i=0;i<10;i++)rncout<
Android应用分配的内存空间
Android应用程序都会默认分配一定的内存空间,有些应用如果没有控制好内存的使用,就会造成内存溢出。 http://hubingforever.blog.163.com/blog/static/171040579201212414542373/ 点击打开链接 如何查看自己手机堆空间大小: 1.连上手机adb shell 2.getprop dal
怎么分配不了内存空间?
做一C++改C的项目,把类改成结构,在一段代码中,第一个更改成功,并分对定义的类分配了空间,在改每二个时,刚一分配空间就报错,把代码单独提到另外的程序中又可以.rnrn这是提出来的代码,可以运行.有没有哪位高手指点一下.rn#ifndef __AA__rn#define __AA__rnrntypedef struct //class DATADOT //data dot descriptionrnrn short x; //x-coordinate of dot centerrn short y; //y-coordinate of dot centerrn short d; //diamater of dotrn short len; //length of pathrn char clr; //color of dotrn char grp; //Group labelrn unsigned short d2c; //distance to image center, ATTENTION the overflow !!!rnDATADOT;rnrntypedef struct //CDataDotsVerifierrnrn unsigned char* m_pImage;rn short m_nWidth;rn short m_nHeight;rnrn DATADOT* m_pDataDot;rn short m_nDataDotNum;rnCDataDotsVerifier;rn#endifrnrnmain()rnrn DATADOT *dot;rn dot=(DATADOT*)malloc(sizeof(DATADOT));rn rn CDataDotsVerifier *ddv; //CDataDotsVerifier ddv(m_pBuf1, w, h);rn ddv = (CDataDotsVerifier*)malloc(sizeof(CDataDotsVerifier));rnrn free(dot);rn free(ddv); rn return 0;rn
到底什么时候分配内存空间?
我很迷惑的是:java中到底如何分配内存空间的?我知道用new关键字创建一个对象时,就会被分配一个内存空间。还有其它的关键字也这样吗?高手支招啊!
new对象所占内存空间的问题
[color=#FF0000]//首先new一个对象。[/color]rnStudent s = new Student("0001","张三");rns.Speak();rnrn[color=#FF0000]//然后再重新new。[/color]rns = new Student("0002","张四");rns.Speak();rnrn[color=#FF0000]// 当重新new s的时候,它所占的内存空间大小有没有发生变化呢?或者是重新给s开辟一块内存空间呢?[/color]
Java中的数组定义
近日,重装了java环境,使用jdk1.6,重新从基础学习出发。 首先,对于数组,Java里面建立数组主要有两种方式: /* * 基本数据类型的创建。数组一定是先分配了空间再赋值 * 如果在分配空间的时候初始化,这叫静态初始化,也就是使用{}赋值 * 如果在分配空间的时候没有初始化,这叫动态初始化,之后不能使用{}赋值 */ //1.不指定数组长度,直接...
在C#中,如何分配连续内存空间?数组?unsafe指针?
在C语言中是用函数malloc做到的rn在C#中有没有等价的方法了?rn可以用数组,但是数组太不方便了rn请高手指教啊,感激
使用new动态分配内存空间
<p>rn <br />rn</p>rn<p style="font-family:&quot;color:#3D3D3D;font-size:16px;background-color:#FFFFFF;">rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<div>rn <br />rn</div>rn<img src="https://img-bss.csdn.net/201908080328096578.png" alt="" /> rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>rn<p>rn 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。rn</p>
Java定义数组问题
我想定义一个字符串数组,用来存储一句话中的每个单词,rn比如说数组是stringA[],rn字符串为一句话比如为stri="this is a good one."rn我想用每个数组变量来存储字符串stri中的每个单词,最后的结果为rnstringA[0]="this",stringA[1]="is",stringA[2]="a",stringA[3]="good",stringA[4]="one",rn现在遇到的遇到的一个问题是不知道如何去定义这个可变长的数组。来实现我的功能。
Java的数组定义的问题
int x[]=new int [10]; rn为什么这一句在编译时不报错。rn我在书上看到Java语言中声明数组时,无论用何种方式定义数组,都不能指定其长度rn希望能说明的具体些 rn我Java刚入门,想学的明白些,谢谢!rnrnrn
不用new定义变长数组
//对不对不知道,运行好像没发现问题 版本 vs2012 gcc 4.4.7-17 template&amp;lt;typename _Tst,INT nCount = 1024&amp;gt; class BJDArray { public: //gcc 4.4.7-17不支持 //typedef typename _Tst value_type; //typedef typenam...
关于new分配内存空间与strlen求其大小的疑问? 在线恭候
long Next_Pact_No;rnchar *Pact_NoBuf = new char[16];rnNext_Pact_No = strlen(Pact_NoBuf);rn为什么求出来的"Next_Pact_No"的值是20,而不是16呢?
new[] 和直接定义数组,内存溢出问题请教
如下列代码,执行Button1Click不会溢出,而执行Button2Click会内存溢出,奇怪了,开辟的内存空间是一定大的,望各位大侠指教!rn//---------------------------------------------------------------------------rnrnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn double *p;rn p=new double(1000*1000*200);rn // Edit1->Text=sizeof(p);rnrnrn//---------------------------------------------------------------------------rnvoid __fastcall TForm1::Button2Click(TObject *Sender)rnrn double PP[1000][1000][200];rn //Edit1->Text=sizeof(PP);rnrn//--------------------------------------------------------------------------
菜问题:用new 动态定义数组
我想这样rnvoid main()rnrn int m;rn cin>>m;rn int AA[m];rn...............rnrn相信大家都知道我的意思,但我不知道怎样实现这个功能.好像用new可以,但是没有用过new,所以望大家指教rn
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview