int[] myArray = new int[5];
嗨, 我知道还有其他初始化数组的方法,例如:
int[] myArray = {1,2,3,4,5};
但是您能告诉我顶部示例中的第二个int
代表什么吗?
我认为第一个“ int”已经指定数组具有整数值,不是吗?
答案 0 :(得分:2)
int[] myArray = { 1, 2, 3, 4, 5 };
中的构造是特殊情况。由于声明的类型,编译器知道{ 1, 2, 3, 4, 5 }
正在创建int[]
数组。
但是,用于int数组的完整数组创建语法为new int[5]
(可以变化),它告诉编译器无论声明的类型如何,都会创建一个新的int[]
数组:>
例如,您可以声明一个Object
变量,并为其分配一个int
数组:
Object myArrayObject = new int[5]; //OK: this creates an int array
这行不通:
Object myArrayObject = { 1, 2, 3, 4, 5 }; //won't compile
答案 1 :(得分:1)
因此,当您键入new时,您指定要让Java为堆分配内存。多少内存?是的,足够用于5个整数int [5]的内存。因此,java将在堆上分配足够的连续内存以存储5个整数。
答案 2 :(得分:1)
int[] myArray = new int[5];
意味着您声明一个数组,该数组可以包含一个名为myArray
(由int[] myArray
组成的整数值),然后将其定义为大小为5的整数数组(= new int[5];
); >
这些步骤是内联的,您也可以在两行中进行相同的操作:
int[] myArray; // declaration
myArray = new int[5]; // definition
答案 3 :(得分:1)
使用int
和其他原始类型,您是正确的,双重声明在很大程度上是多余的。
但请考虑以下示例:
Object [] array = new String[5];
这是有效的Java代码(即使它已经稍微损坏了*)。
从更一般的角度来看,它遵循与使用新对象初始化任何变量时相同的模式:
Foo foo = new Foo();
第一个Foo
是变量的类型(盒子的形状),第二个是实际对象的类型(什么形状是您放在框中)。
注意:从Java 10开始,您可以使用关键字var
声明局部变量,从而省去了两次指定类型的需要:
var array = new int[5];
编译器将从中推断出array
的类型将与其初始化时使用的对象相同。 (在这种情况下为int[]
。
*之所以会出错,是因为如果您尝试将数组中除String
之外的任何内容放入代码中,代码只会在运行时失败,而不会在编译期间失败。
答案 4 :(得分:0)
首先是数组的数据类型。其他int用于初始化数组中的5个整数对象