Java数组初始化第二个变量类型

时间:2018-08-06 14:13:02

标签: java arrays initialization

int[] myArray = new int[5];

嗨, 我知道还有其他初始化数组的方法,例如:

int[] myArray = {1,2,3,4,5};

但是您能告诉我顶部示例中的第二个int代表什么吗? 我认为第一个“ int”已经指定数组具有整数值,不是吗?

5 个答案:

答案 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个整数对象