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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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 和 delete
1.什么是new和delete在C语言中我们可以利用标准库函数中的 malloc 和 free 来动态分配内存空间,而在C++中提供了运算符 new 和 delete 来取代 malloc 和 free 进行动态分配内存空间。2.new的用法表达式- new 数据类型 ; //申请内存空间。 - new 数据类型 (初值); //申请内存空间时
C++用new动态分配数组内存后用()进行初始化
double *dWin = NULL; try { dWin = new double[iWinSize*iWinSize](); // 每个元素初始化为0 } catch (bad_alloc) { return -1; }
Java基础(数组-内存空间的划分)
寄存器是cpu的,我们不用管 本地方法区:这个跟所有系统相关的,java虚拟机,分版本,调用不同系统的内容 栈内存。        存储的都是局部变量。        而且变量所属的作用域一旦结束,该变量就自动释放。
数组的定义和和内存分配
数组的定义和和内存分配 Java中定义数组的语法有两种:   int[] arr;//第一种 int arr[];//第二种 这两种形式上没有区别,使用效果完全一样。 与C、C++不同,Java在定义数组时并不为数组元素分配内存空间,因此[]中无需指定数组元素的个数,也就是数组长度。 所以我们需要先分配内存空间,才能访问数组中的元素。 而想要为数组分配内存空间可以...
一张图让你没明白 java string 的 内存分配
一张图让你没明白 java string 的 内存分配 常量池 栈 堆:
C++ 动态分配数组空间,以及opencv中Mat类的初始化
在C++中,如果想要申请动态数组,必须要用动态分配的方式。
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);
使用new分配内存、创建动态数组、
1、使用new来分配内存程序员需要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址,程序员的责任是将改地址赋给一个指针。 int *pn = new int;new int告诉程序,需要存储int类型的内存,系统动态分配适合大小的内存,并将地址返回给pn,通过pn指针可操作内存中的值。注意,使用new分配的动态内存要用delete删除,对应格式: ...
关于java数组的内存分配,顺便提一下java变量的内存分布
关于数组,我们首先要知道的是,他是引用数据类型,数组是存储同一种数据类型多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型。数组有两种初始化方式,动态初始化和静态初始化.以下通过介绍两种初始化方式来介绍内存的分配. 在介绍内存分配前,首先要对内存有一定的了解: 内存,简单说就是存放正在运行的程序,我们知道,java程序运行的载体是JVM,运行环境是JRE,内存分配给JVM空间执...
Java变量的声明、内存分配及初始化
Java变量的声明、内存分配及初始化 class Person { String name; int age; void talk() { System.out.println("我是: "+name+", 今年: "+age+"岁"); } } public class TestJava2_1 { public st
java new 内存分配
1.Java的内存机制  Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后(比如,在函数A中调用函数B,在函数B中定义变量a,变量a的作用域只是函数B,在函数B运行完以后,变量a会自动被销毁。分配给它的内存会被回收),
Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间所以变量的分配与释放,都无须程序员自行考虑。 动态内存:指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。 1.下面通过一个例
C++学习笔记(new delete运算符)
在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有区别?①如果new得是一个变量,那么使用delete就可以。但是如果new得是一个数组,使用delete的话只能释放数组的第一个元素占用的内存,这会造成严重的内存泄漏的。② 使用new申请的数组应该使用delete[]来销毁它。③new分配的内存不delete会泄漏。④由new分配的内存空间是连续的。⑤如果当时内存无...
【java】数组的内存与动态定义数组
例如:int[] in = new int[2];  
动态内存分配(new delete)
一、动态内存分配的引入 一般,变量和对象在内存中的分配都是编译器在编译程序时安排好了的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。动态内存分配解决了这个问题。    通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;     有些操作对象
堆分配的内存空间是否连续
malloc分配的内存空间在逻辑上面连续,在物理内存上面不一定连续。堆分配的空间在逻辑地址上是连续的,但在物理地址上是不连续的(因为采用了页式内存管理,windows下有段机制、分页机制),如果逻辑地址空间上已经没有一段连续且足够大的空间,则分配内存失败。
java 存储空间 简单分析
http://www.cnblogs.com/onlywujun/articles/5086594.html   基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object) 。方法
C++ new动态分配内存和delete释放内存
C++中使用简便而强大的new和delete运算符来进行动态内存的分配. 值得注意的是,new和delete和c语言中的malloc和free不同,new和delete是运算符,因此执行效率更高. 如何使用new , delete 呢? 首先我们来看一段代码: int *p = new int; 我们可以看到有那些元素. 首先是int, 它的含义是声明指针类型; 其次
Java关键字new-----对象的内存分配原理
一、关键字new概述         "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬间都做了什么?         在Java中使用new关键字创建对象变得很容易了,事实上,对这些事情你是不需要考虑的。需要访问一个文件吗?只需要创建一个新的File实例:new File(“jdb
java数组内存分配内存结构详解
引自:https://m.2cto.com/kf/201611/561021.html Java 数组是静态的 Java 语言是典型的静态语言,因此 Java 数组是静态的,即当数组被初始化之后,该数组 所占的内存空间、数组长度都是不可变的。Java 程序中的数组必须经过初始化才可使用。所谓初始化,即创建实际的数组对象,也就是在内存中为数组对象分配内存空间,并为每个数组 元素指定初始值。 数...
C++ 数组在内存中的分配
接前一篇的内容,C++中数组在内存中也有静态分配和动态分配的区别。静态数组建立的方式为:A a[],它在栈上分配空间;动态方式是使用new,malloc在堆上分配。 数组要么在静态存储区被创建(如全局数组),要么在栈或堆上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。看下例: 1 #include 2 using names
指针数组&数组指针的分配内存及函数参数 C语言版
最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有我想要的东西。要么就是C和C++混为一谈,new int[5]这种语法C肯定是错误的,所以找个机会总结一下,然后希望以后不要再栽在基础上。定义指针数组:int p[10] 数组指针 int(*p)[5]
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个【用来存储整形】的空间,{ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼
java定义变量的时候分配内存的过程
堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全局变量和静...
用new和delete运算符动态分配内存空间的方法编写程序。
用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。
数组属性,根据参数动态设置类中数组的长度!构造函数传入数组长度!并初始化数组!
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; name
Java中的数组和内存分配
理解数组 概念:数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型,只要所有的数组元素具有相同的数据类型即可 定义数组的方法: ①:type[] arrayName;(推荐使用这种方式) ②:type arrayName[]; 注意:定义数组时不能指定数组的长度 数组的初始化 Java中的数组必须先初始化,才能...
定义一个结构体指针需要分配存储空间?malloc
#include<bits/stdc++.h> using namespace std; typedef struct name{ char sname[10]; }Name; typedef struct person{ Name *myname; }Person; int main() { Person wang; wang.myname= (Name*)m...
Java中数组的存储与内存分配
Java数组及其内存分配 [日期:2013-03-28] 来源:Linux社区  作者:xiaoxuetu [字体:大 中 小] 几乎所有的程序设计语言都支持数组。Java也不例外。当我们需要多个类型相同的变量的时候,就考虑定义一个数组。在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,
定义结构体指针,内存空间分配问题
//下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题 struct data {     int i;     int j; }; void main(void) {     struct data dat1; //定义一个struct data
Qt学习06——内存分配策略
QString在一个连续的内存块中保存字符串数据,当字符串长度不断增长时,QString需要重新分配内存空间。本文介绍QString使用的内存分配策略。
数组的基本认识和内存分配
1.栈是如何分配内存的 栈可以算是受限的线性表。它只允许在表的一端进行数据的输入,删除操作。放入数据的入口即为栈的栈顶,将数据压入栈后,数据所存在的位置即为栈的栈。它在进行插入和删除工作时必须从栈顶元素入手,即就是先进栈的元素后出栈,即先进后出。添加新元素时,可直接将新元素压在栈顶元素之上,而此时的新元素会代替之前的栈顶元素成为栈顶元素。而进行删除操作时,也必须从栈顶元素入手,如需删除的是栈顶元...
c++学习笔记 动态内存分配 对象、对象数组的动态创建和释放
声明:注明代码 出处http://www.weixueyuan.net/view/6347.html 当我们需要为类对象动态分配存储空间时,我们应该使用C++语言提供的new与new[]操作符,而不要使用C语言提供的malloc函数。 C++语言提供的new和new[]操作符则不会如此,使用它们为对象分配存储空间的同时,它们也会调用相应的构造函数。 操作符de
变量的五大内存空间分配
首先,程序变量的内存空间有五个:堆栈区(栈区)、堆区、全局区(静态区)、代码区、文字常量区1、堆栈区(栈区)堆栈区是一种老的叫法,由于堆栈区的操作方式和数据结构中的栈是类似(数据先进后出的结构),所以后面很多在称堆栈区的时候直接叫做栈区,所以其实堆栈区和栈区是一个意思。 堆栈区是又编译器自动分配和释放的,存放的内容是一些局部变量和函数的参数等。2、堆区堆区是自己申请的内存空间,C中使用malloc...
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的垃圾回收机制自动清
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习中常见的问题 java学习中遇到的问题