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

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

0

6个回答

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

0

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

0

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

0

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

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

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

0

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

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++动态分配内存空间 : new 和 delete
1.什么是new和delete在C语言中我们可以利用标准库函数中的 malloc 和 free 来动态分配内存空间,而在C++中提供了运算符 new 和 delete 来取代 malloc 和 free 进行动态分配内存空间。2.new的用法表达式- new 数据类型 ; //申请内存空间。 - new 数据类型 (初值); //申请内存空间时
java数组的初始化与内存分配
java数组与java实例一样是引用数据类型。所谓引用数据类型,相似于c中的指针,就是给变量赋值的时候不是直接获得数据的值而是一种引用(即数据的地址)。例如   int[] t1=new int[]{1,2};   int[] t2=t1; 当有表达式t2[0]=000; t2[1]=1111; 时会有t1[0]=000; t1[1]=1111;。由此可见t1,t2同时指向了内存中的一块
C++用new动态分配数组内存后用()进行初始化
double *dWin = NULL; try { dWin = new double[iWinSize*iWinSize](); // 每个元素初始化为0 } catch (bad_alloc) { return -1; }
变量声明有没有分配内存?
Q1: int i 这个有没有分配内存呢? int *p 呢? 具体是在栈空间还是在堆空间里分配内存呢?   A1: int i; int *p; 这两个都在栈区分配了内存空间 但是p指向的地址为野地址,不可直接拿来使用 即p指向的空间没有分配   Q2:在Java中定义数组时必须分配内存,这句话是错的还是对的呢   A2: Java
Java中String的内存空间分配
我们先举个例子:public class Test { public static void main(String[] args) { String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1 == str2);
数组的定义和和内存分配
数组的定义和和内存分配 Java中定义数组的语法有两种:   int[] arr;//第一种 int arr[];//第二种 这两种形式上没有区别,使用效果完全一样。 与C、C++不同,Java在定义数组时并不为数组元素分配内存空间,因此[]中无需指定数组元素的个数,也就是数组长度。 所以我们需要先分配内存空间,才能访问数组中的元素。 而想要为数组分配内存空间可以...
Java基础(数组-内存空间的划分)
寄存器是cpu的,我们不用管 本地方法区:这个跟所有系统相关的,java虚拟机,分版本,调用不同系统的内容 栈内存。        存储的都是局部变量。        而且变量所属的作用域一旦结束,该变量就自动释放。
C++ 动态分配数组空间,以及opencv中Mat类的初始化
在C++中,如果想要申请动态数组,必须要用动态分配的方式。
一张图让你没明白 java string 的 内存分配
一张图让你没明白 java string 的 内存分配 常量池 栈 堆:
数组的简单解析
数组是最基本的构造类型,它是一组相同类型数据的有序集合。数组中的元素在内存中连续存放,每个元素都属于同一数据类型,用数组名和下标可以唯一确定数组元素。
关于java数组的内存分配,顺便提一下java变量的内存分布
关于数组,我们首先要知道的是,他是引用数据类型,数组是存储同一种数据类型多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型。数组有两种初始化方式,动态初始化和静态初始化.以下通过介绍两种初始化方式来介绍内存的分配. 在介绍内存分配前,首先要对内存有一定的了解: 内存,简单说就是存放正在运行的程序,我们知道,java程序运行的载体是JVM,运行环境是JRE,内存分配给JVM空间执...
使用new分配内存、创建动态数组、
1、使用new来分配内存程序员需要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址,程序员的责任是将改地址赋给一个指针。 int *pn = new int;new int告诉程序,需要存储int类型的内存,系统动态分配适合大小的内存,并将地址返回给pn,通过pn指针可操作内存中的值。注意,使用new分配的动态内存要用delete删除,对应格式: ...
【C++】动态内存分配详解(new/new[]和delete/delete[])
一、为什么需要动态内存分配? 在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。 例如,当需要的内存取决于用户输入。 在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。 (1)特点 1.C++中通过new关键字进行动态内存申请 2.C++中的动态内存分配是基于类型进行的 ...
Java变量的声明、内存分配及初始化
Java变量的声明、内存分配及初始化 class Person { String name; int age; void talk() { System.out.println("我是: "+name+", 今年: "+age+"岁"); } } public class TestJava2_1 { public st
C++ 数组在内存中的分配
接前一篇的内容,C++中数组在内存中也有静态分配和动态分配的区别。静态数组建立的方式为:A a[],它在栈上分配空间;动态方式是使用new,malloc在堆上分配。 数组要么在静态存储区被创建(如全局数组),要么在栈或堆上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。看下例: 1 #include 2 using names
C++学习笔记(new delete运算符)
在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有区别?①如果new得是一个变量,那么使用delete就可以。但是如果new得是一个数组,使用delete的话只能释放数组的第一个元素占用的内存,这会造成严重的内存泄漏的。② 使用new申请的数组应该使用delete[]来销毁它。③new分配的内存不delete会泄漏。④由new分配的内存空间是连续的。⑤如果当时内存无...
【java】数组的内存与动态定义数组
例如:int[] in = new int[2];  
java new 内存分配
1.Java的内存机制  Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后(比如,在函数A中调用函数B,在函数B中定义变量a,变量a的作用域只是函数B,在函数B运行完以后,变量a会自动被销毁。分配给它的内存会被回收),
C++ new动态分配内存和delete释放内存
C++中使用简便而强大的new和delete运算符来进行动态内存的分配. 值得注意的是,new和delete和c语言中的malloc和free不同,new和delete是运算符,因此执行效率更高. 如何使用new , delete 呢? 首先我们来看一段代码: int *p = new int; 我们可以看到有那些元素. 首先是int, 它的含义是声明指针类型; 其次
堆分配的内存空间是否连续
malloc分配的内存空间在逻辑上面连续,在物理内存上面不一定连续。堆分配的空间在逻辑地址上是连续的,但在物理地址上是不连续的(因为采用了页式内存管理,windows下有段机制、分页机制),如果逻辑地址空间上已经没有一段连续且足够大的空间,则分配内存失败。
java 存储空间 简单分析
http://www.cnblogs.com/onlywujun/articles/5086594.html   基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object) 。方法
java创建对象内存分配空间及其原理一
一直想写关于java对象的文章,一直拖着就等到了现在。其实,当你真正走上程序员这条道路的正轨时,代码对于我们来说,已经不再是问题了。但是,假如我问你原理,你真的能知道其一二吗?          网上关于java的文章琳琅满目,但真的讲到原理这东西,很多都是晦涩难懂,有点小复杂。所以,我将用通俗易懂的语言去讲解一些原理性的东西。          话不多说,进入正题。          我们
动态内存分配(new delete)
一、动态内存分配的引入 一般,变量和对象在内存中的分配都是编译器在编译程序时安排好了的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。动态内存分配解决了这个问题。    通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;     有些操作对象
java定义变量的时候分配内存的过程
堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全局变量和静...
指针数组&数组指针的分配内存及函数参数 C语言版
最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有我想要的东西。要么就是C和C++混为一谈,new int[5]这种语法C肯定是错误的,所以找个机会总结一下,然后希望以后不要再栽在基础上。定义指针数组:int p[10] 数组指针 int(*p)[5]
Java关键字new-----对象的内存分配原理
一、关键字new概述         "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬间都做了什么?         在Java中使用new关键字创建对象变得很容易了,事实上,对这些事情你是不需要考虑的。需要访问一个文件吗?只需要创建一个新的File实例:new File(“jdb
Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间所以变量的分配与释放,都无须程序员自行考虑。 动态内存:指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。 1.下面通过一个例
初始化指针是否需要分配内存空间
初学指针,不知道声名指针或者声名对象时为什么要用new来分配内存空间,如以下代码:   int *a ; int b = 2; a = &b; cout<<"a = "<<*a;此处输出结果为 a = 2; 而再看如下代码:int *a; int b = 2; *a = b; cout<<"a = "<<*a;运行时编译器会报错,为什么呢?   简单来讲,我们没有为int 型指针p开辟内存空间(
new一个动态二维数组并实现内存连续
#include using namespace std; int main() { int **p;//新建一个二级指针p,即指向指针的指针 p = new int*[3];//开辟3个【用来存储指针(即地址)】的空间,{ p[0] p[1] p[2] },其中p→p[0] *p = new int[12];//开辟12个【用来存储整形】的空间,{ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼
用new和delete运算符动态分配内存空间的方法编写程序。
用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。
Java中的数组和内存分配
理解数组 概念:数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型,只要所有的数组元素具有相同的数据类型即可 定义数组的方法: ①:type[] arrayName;(推荐使用这种方式) ②:type arrayName[]; 注意:定义数组时不能指定数组的长度 数组的初始化 Java中的数组必须先初始化,才能...
定义结构体指针,内存空间分配问题
//下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题 struct data {     int i;     int j; }; void main(void) {     struct data dat1; //定义一个struct data
Java中数组的存储与内存分配
Java数组及其内存分配 [日期:2013-03-28] 来源:Linux社区  作者:xiaoxuetu [字体:大 中 小] 几乎所有的程序设计语言都支持数组。Java也不例外。当我们需要多个类型相同的变量的时候,就考虑定义一个数组。在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,
java"动态分配数组容量"-键盘输入几个数,相应分配多大空间
之前对于从键盘输入几个数存入数组,但输入数量不确定的情况,常常预先申请一个较大数量的数组。如下: int[] a = new int[1000];//动态分配了较大空间,但不能保证输入的数个数小于1000之后发现了main()方法的参数是 "String[] args",特点是记录从键盘输入的内容,以字符串数组的形式保存,但具体输入几个元素并不确定,此处相当于将问题转嫁给了 String数组。代
字符数组 与 字符指针(使用前分配内存)
1.字符指针可以指向一个字符串。 我们可以用字符串常量对字符指针进行初始化。例如,有说明语句: char *str = "This is a string."; 是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。 这里要注意字符指针与字符数组之间的区别。例如,有说明语句: char string[ ]="This is a string.";
动态存储空间分配,未知行数二维数组创建及内存释放
C++操作符new用来进行动态存储分配或运行时存储分配,它的值是一个指针。 为一个整数动态分配存储空间,如下几种分配方法均可实现: (1)  int *y; y=new int; *y=10; (2)
实例变量和类变量内存分配
Java向程序员许下一个承诺:无需关心内存回收,java提供了优秀的垃圾回收机制来回收已经分配的内存。大部分开发者肆无忌惮的挥霍着java程序的内存分配,从而造成java程序的运行效率低下! java内存管理分为两方面:     1,内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间。 2,内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清
用new来为指针分配内存
//用new来分配内存#includeusing namespace std;int main(){ int * pt=new int;//使用new来为指针pt分配一个未命名的内存空间 *pt=1001;  //new int 告诉程序,需要适合存储适合int类型数据的内存。new操作符根据数据类型来确定需要多少字节内存来存储。  cout double * pd=new dou
在C++中为数组动态分配内存
在C++中为数组动态分配内存的格式如下:   第一步:声明        type (p)[常量1][常量2]...[常量n]; 第二步:申请        p=new type[x][常量1][常量2]...[常量n]; 说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,       然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。 举例
Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括: 1)用来保存基本数据类型的值; 2)保存类的实例,即堆区对象的引用(指针) 3)也可以用来
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习中常见的问题 java学习中遇到的问题