简单记录下JAVA数组定义与初始化的方法,跟C++还是有很大区别的。
下面是一维数组的定义方法:
public static void main(String[] args) {
int [] ids;//声明
//1.1静态初始化
ids = new int[]{1,2,3,4};
int arr[] = {1,2,3,4};
//1.2动态初始化
String[] names = new String[5];
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
//调用数组长度
for(int i = 0;i < names.length;i++)
{
if(names[i] == null)break;
System.out.println(names[i]);
}
}
一般来说 标准定义为:
int[] arr;
但是你也可以写成:
int arr[];
还有这里的数组与C++有很大区别,这里数组就是一个类,所以你创建数组时只是创建了一个数组变量,它里面还没东西,必须声明数组长度即:
arr = new int [107];//也就是说数组长度是不可变的
注意:如下代码!
int[] arr = new int[]{1,3,4,5}
int[] arr1 ;
arr1 = arr;
arr1[1] = 100;
此时的arr[1]就等于100了。
因为JAVA里的数组变量是一个指针(一般局部变量在栈里),然后指向堆里的一块连续的空间。所以改变arr1指向空间的值,就相当于改变arr指向空间的值(因为他们指向的位置相同!!)
所以如果你只定义了数组变量,是不能像C++那样直接引用的。
比如:
int[] arr;
arr[0] = 1;//这里就会报错,The local variable arr may not have been initialized,变量未初始化
因为你的数组变量指针为空,必须new一块空间给这个数组,使得其数组变量有意义。
下面是二维数组的初始化。
public static void main(String[] args) {
System.out.println("game start!");
//二维数组静态初始化
int[][] arr = new int [][]{{1,2,3},{4,5},{6}};
int arr1 [][] = {{1,2,3},{4,5},{6}};
//数组之间的赋值
int[][] arr7 = new int [3][];
arr7[0] = arr[0];
for(int i = 0;i < arr7[0].length; i++ )
{
System.out.println("数组赋值测试 - :" + arr7[0][i]);
}
//二维数组的长度获取
System.out.println("arr.length : " + arr.length);
for(int i = 0; i < arr.length; i++)
System.out.println("arr[" + i + "].length : " + arr[i].length);
//二维数组的遍历
for(int i = 0; i < arr.length; i++)
{
for(int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
//二维数组动态初始化
int arr2[][] = new int [3][2];
int arr3[][] = new int [3][];
System.out.println("arr2.length : " + arr2.length);
System.out.println("arr2[0].length : " + arr2[0].length);
//二维数组第二维新建对象
arr3[0] = new int[4];
System.out.println("arr3.length : " + arr3.length);
System.out.println("arr3[0].length : " + arr3[0].length);
String[][] arr4 = new String[3][2];
String[][] arr5 = new String[3][];
//二维数组的初始化元素
int arr6[][] = new int [3][4];
System.out.println(arr6);//[[I@15db9742
System.out.println(arr6[0]);//[I@15db9742
System.out.println(arr6[0][0]);
}
有趣的是:你可以这样定义二维数组:int[] arr[];
类(结构体)数组定义与上述int数组定义相同。
比如下面是Bank类,里的Customer数组声明,与数组赋值。
class Bank{
private Customer[] customers = new Customer[10007];//这里必须先声明数组长度!!
private int numberOfCustomer = 0;
public Bank(){
}
public Customer getCustomer(int id) {
if(id >= 0 && id <= numberOfCustomer)
return customers[id];
System.out.println("输入客户id有误!!");
return null;
}
public int getNumberOfCustomer() {
return numberOfCustomer;
}
public void addCustomer(String firstName,String lastName){
customers[numberOfCustomer] = new Customer(firstName,lastName);
this.numberOfCustomer++;
}
}