如何在Java中声明和初始化数组?
当前回答
或者,
// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];
它声明了一个名为arrayName的数组,大小为10(您可以使用元素0到9)。
其他回答
或者,
// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];
它声明了一个名为arrayName的数组,大小为10(您可以使用元素0到9)。
数组是项目的顺序列表
int item = value;
int [] one_dimensional_array = { value, value, value, .., value };
int [][] two_dimensional_array =
{
{ value, value, value, .. value },
{ value, value, value, .. value },
.. .. .. ..
{ value, value, value, .. value }
};
如果它是一个物体,那么它就是同一个概念
Object item = new Object();
Object [] one_dimensional_array = { new Object(), new Object(), .. new Object() };
Object [][] two_dimensional_array =
{
{ new Object(), new Object(), .. new Object() },
{ new Object(), new Object(), .. new Object() },
.. .. ..
{ new Object(), new Object(), .. new Object() }
};
对于对象,您需要将其赋值为null,以使用新的Type(..)初始化它们,像String和Integer这样的类是特殊情况,将按如下方式处理
String [] a = { "hello", "world" };
// is equivalent to
String [] a = { new String({'h','e','l','l','o'}), new String({'w','o','r','l','d'}) };
Integer [] b = { 1234, 5678 };
// is equivalent to
Integer [] b = { new Integer(1234), new Integer(5678) };
通常,您可以创建M维数组
int [][]..[] array =
// ^ M times [] brackets
{{..{
// ^ M times { bracket
// this is array[0][0]..[0]
// ^ M times [0]
}}..}
// ^ M times } bracket
;
值得注意的是,从空间角度来看,创建M维阵列是昂贵的。因为当您在所有维度上创建一个N的M维数组时,数组的总大小大于N^M,因为每个数组都有一个引用,并且在M维有一个(M-1)维引用数组。总尺寸如下
Space = N^M + N^(M-1) + N^(M-2) + .. + N^0
// ^ ^ array reference
// ^ actual data
根据数组的定义,数组可以包含基元数据类型以及类的对象。对于基元数据类型,实际值存储在相邻的内存位置。对于类的对象,实际对象存储在堆段中。
一维阵列:
一维数组声明的一般形式是
type var-name[];
OR
type[] var-name;
在Java中实例化数组
var-name = new type [size];
例如
int intArray[]; // Declaring an array
intArray = new int[20]; // Allocating memory to the array
// The below line is equal to line1 + line2
int[] intArray = new int[20]; // Combining both statements in one
int[] intArray = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Accessing the elements of the specified array
for (int i = 0; i < intArray.length; i++)
System.out.println("Element at index " + i + ": "+ intArray[i]);
参考:Java中的数组
下面显示了数组的声明,但未初始化数组:
int[] myIntArray = new int[3];
下面显示了数组的声明和初始化:
int[] myIntArray = {1,2,3};
现在,下面还显示了数组的声明和初始化:
int[] myIntArray = new int[]{1,2,3};
但第三个显示了匿名数组对象创建的属性,该属性由引用变量“myIntArray”指向,因此如果我们只写“newint[]{1,2,3};”,那么这就是如何创建匿名数组对象。
如果我们只写:
int[] myIntArray;
这不是数组的声明,但以下语句使上述声明完成:
myIntArray=new int[3];
以基元类型int为例。有几种方法可以声明和int数组:
int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};
在所有这些中,可以使用inti[]而不是int[]i。
对于反射,可以使用(Type[])Array.newInstance(Type.class,capacity);
注意,在方法参数中。。。表示变量参数。本质上,任何数量的参数都可以。用代码更容易解释:
public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};
在该方法中,varargs被视为普通的int[]。类型只能在方法参数中使用,因此int.i=newint[]{}不会编译。
请注意,当将int[]传递给方法(或任何其他Type[])时,不能使用第三种方法。在语句int[]i=*{a,b,c,d,etc}*中,编译器假设{…}表示int[]。但这是因为您正在声明一个变量。将数组传递给方法时,声明必须是newType[capartment]或newType[]{…}。
多维数组
多维数组更难处理。本质上,2D阵列是阵列的阵列。int[][]表示int[]的数组。关键是,如果int[][]声明为int[x][y],则最大索引为i[x-1][y-1]。基本上,矩形int[3][5]是:
[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 使用C返回一个数组
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 向对象数组添加属性
- 在Java流是peek真的只是调试?