Java中数组元素就是变量

Java 1512℃

当数组引用变量指向一个有效的数组对象之后,程序就可通过该数组引用变量来访问数组对象。Java 语言不允许直接访问堆内存中的数据,因此无法直接访问堆内存中的数组对象,程序将通过数组引用变量来访问数组。Java 语言避免直接访问堆内存中的数据可以保证程序更加健壮,如果程序直接访问并修改堆内存中数据,可能破坏内存中的数据完整性,从而导致程序Crash。

只要在已有数据类型之后增加方括号,就会产生一个新的数组类型,示例如下。

  • int -> int[]:在int 类型后增加[]即变为int[]数组类型。
  • String -> String[]:在String类型后增加[]即变为String[]数组类型。
  • Person -> Person[]:在Person类型后增加[]即变为Person[]数组类型。
  • int[] -> int[][]:在int[]类型后增加[]即变为int[][]数组类型。

当程序需要多个类型相同的变量来保存程序状态时,可以考虑使用数组来保存这些变量。当一个数组初始化完成,就相当于定义了多个类型相同的变量。无论哪种类型的数组,其数组元素其实相当于一个普通变量,把数组类型之后的方括号去掉后得到的类型就是该数组元素的类型。示例如下。

  • int[] -> int:int[]数组的元素相当于int类型的变量。
  • String[] -> String:String[]数组的元素相当于String类型的变量。
  • Person[] -> Person:Person[]数组的元素相当于Person类型的变量。
  • nt[][] -> int[]:int[][]数组的元素相当于int[]类型的变量。

当通过索引来使用数组元素时,将该数组元素当成普通变量使用即可,包括访问该数组元素的值,为数组元素赋值等。下面程序示范了将数组元素和普通变量相互赋值的情形。

class Cat  
{  
     double weight;  
     int age;  
     public Cat(double weight , int age)  
     {  
          this.weight = weight;  
          this.age = age;  
     }  
}  
public class ArrayTest  
{  
     public static void main(String[] args)   
     { 
          //定义并动态初始化一个int[]数组  
          int[] pos = new int[5];  
          //采用循环为每个数组元素赋值  
          for (int i = 0; i < pos.length ; i++ )  
          {  
               pos[i] = (i + 1) * 2;  
          }  
          //对于 pos数组的元素来说,用起来完全等同于普通变量  
          //下面既可将数组元素的值赋给 int变量,也可将 int 变量的值赋给数组元素  
          int a = pos[1];  
          int b = 20;  
          pos[2] = b; 
          //定义并动态初始化一个Cat[]数组  
          Cat[] cats = new Cat[2];  
          cats[0] = new Cat(3.34, 2);  
          cats[1] = new Cat(3.2 , 2);  
          //将 cats数组的第1个元素的值赋给c1  
          Cat c1 = cats[0];  
          Cat c2 = new Cat(4.3, 3);  
          //将 c2的值赋给 cats数组的第2个元素  
          cats[1] = c2; 
     }  
}

上面程序示范了数组元素和普通变量相互赋值的情况。可以看出,数组元素和普通变量在用法上几乎没有太大的区别。需要指出的是,main 方法声明的变量都属于局部变量,因此它们都被保存在 main 方法栈中;但数组元素则作为数组对象的一部分,总是保存在堆内存中,不管它们是基本类型的数组元素,还是引用类型的数组元素。

转载请注明:零五宝典 » Java中数组元素就是变量