首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中不使用“new”关键字来声明数组

在Java中不使用“new”关键字来声明数组
EN

Stack Overflow用户
提问于 2016-08-19 06:38:46
回答 5查看 17.6K关注 0票数 30

以下两个声明之间有什么区别吗?

代码语言:javascript
复制
int arr[] = new int [5];

代码语言:javascript
复制
int arr1[] = {1,2,3,4,5};

arr1是在堆栈上声明的还是在堆上声明的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-19 06:42:03

有一个明显的区别,一个有所有的零,而另一个包含1.5。

但这是唯一的区别。两者都是5元素int数组,都是以相同的方式分配的.用大括号声明只是语法上的方便,而没有new

请注意,只有在声明数组时才能使用此表单:

代码语言:javascript
复制
int[] blah = {}

但不是

代码语言:javascript
复制
int[] blah;
blah = {};

代码语言:javascript
复制
return {};

在堆上分配对象(数组是对象)。

票数 36
EN

Stack Overflow用户

发布于 2016-08-19 06:56:13

第一行在堆-an数组对象上放置一个新对象,其中包含4个元素,每个元素包含默认值为0的int。

第二种方法也是这样,但使用非默认值进行初始化。再往下看,这条单行做了四件事:

  • 声明一个名为arr1的int数组引用变量。
  • 创建长度为5(5个元素)的int数组。
  • 用值1、2、3、4、5填充数组的元素
  • 将新的数组对象分配给引用变量arr1

如果您使用对象数组而不是原语:

代码语言:javascript
复制
MyObject[] myArray = new MyObject[3];

然后堆上有一个数组对象,其中有三个类型为MyObject的空引用,但是没有任何MyObject对象。下一步是创建一些MyObject对象,并将它们分配给myArray引用的数组中的索引位置。

代码语言:javascript
复制
myArray[0]=new MyObject();
myArray[1]=new MyObject();
myArray[2]=new MyObject();

总之:数组在构造时必须始终给定大小。JVM需要大小来为新数组对象在堆上分配适当的空间。

票数 8
EN

Stack Overflow用户

发布于 2016-08-19 07:38:04

我同意其他答案,到目前为止,在堆上分配数组的次数最多(无论使用哪两个声明)。但是,根据Java可以在堆栈上分配列表吗?中的最上面的答案,“在特殊情况下,java虚拟机可以执行转义分析,并决定分配对象…。一堆“。我相信这是真的。所以你的问题的答案是:视情况而定。通常在堆里。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39032577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档