Muh*_*dri 25 java arrays new-operator
以下两个声明之间有什么区别吗?
int arr[] = new int [5];
Run Code Online (Sandbox Code Playgroud)
和
int arr1[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
是arr1在堆栈上还是在堆上声明?
And*_*ner 32
明显的区别是一个全部为零,另一个包含[1..5].
但这是唯一的区别.两者都是5元素的int数组,两者都以相同的方式分配.用括号声明是否只是语法上的便利而不是new.
请注意,此表单只能在声明数组时使用:
int[] blah = {}
Run Code Online (Sandbox Code Playgroud)
但不是
int[] blah;
blah = {};
Run Code Online (Sandbox Code Playgroud)
要么
return {};
Run Code Online (Sandbox Code Playgroud)
对象(数组是对象)在堆上分配.
小智 8
第一行将一个新对象放在堆-an数组对象上,该对象包含四个元素 - 每个元素包含一个默认值为0的int.
第二个相同,但使用非默认值初始化.更进一步,这一行做了四件事:
如果使用对象数组而不是基元:
MyObject[] myArray = new MyObject[3];
Run Code Online (Sandbox Code Playgroud)
那么你在堆上有一个数组对象,有三个类型为MyObject的空引用,但你没有任何MyObject对象.下一步是创建一些MyObject对象,并将它们分配给myArray引用的数组中的索引位置.
myArray[0]=new MyObject();
myArray[1]=new MyObject();
myArray[2]=new MyObject();
Run Code Online (Sandbox Code Playgroud)
总之:数组在构造时必须始终给出一个大小.JVM需要大小来为堆上的新数组对象分配适当的空间.
new int [5]可以用于赋值和初始化,但{1, 2}只能用作初始化的声明.(注意,new int[] {1, 2}也可以用作赋值和初始化)
new int [5]将所有条目为零,但{1, 2}并new int[] {1, 2}集1和2在相应条目.
两者都在堆上,您可以保存它们的对象引用.
int arr[] = new int [5];
// arr: object reference to the array
Run Code Online (Sandbox Code Playgroud)
要么
int arr[] = {1, 2, 3, 4, 5};
// arr: object reference to the array
Run Code Online (Sandbox Code Playgroud)有用的材料:
| 归档时间: |
|
| 查看次数: |
9755 次 |
| 最近记录: |