配列は、参照型、配列参照変数は場合配列要素と配列変数メモリ内に別々に格納された参照のみ、であり、の分布のメモリにアレイと参照型アドレスのアレイの基本的なタイプを見てみましょう
配列の基本タイプ:
のは、コードの一部を見てみましょう:
パブリック静的無効メイン(文字列[] args){ ARR [] int型。 ARR =新しいINT [5]。 以下のために(INT i = 0; I <arr.length; iは++){ ARR [i]は=私は10 +; } }
1、INT [] ARR、我々はこの時点でメモリは下記のように可変配列を、定義のみ:
以下に示すように2、ARR =新しいINT [5]は、このコードを実行した後、メモリアレイのために割り当てられたシステム・ヒープ・メモリ、及び0の初期値を完了する。
(アレイを割り当てるの配列順序を通してループの続く3は、注(I int型の場合:ときARR){})は、配列をコピーのみ横断これはループ配列の割り当てのためのものであるのforeachとしてforeachのトラバース割り当て(foreachの構文を使用することができませんコピーは、その後、コピー出力、foreachのを横断すると、実際にメモリを下回る)、配列の値を変更しません。
参照型の配列:
まず、人の定義(すべてのクラスは参照型です):
public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
测试代码:
public class TestArr { public static void main(String[] args) { Person[] student; student=new Person[2]; Person zhang=new Person(); zhang.setName("张三"); zhang.setAge(19); Person li=new Person(); li.setName("李四"); li.setAge(18); student[0]=zhang; student[1]=li; System.out.println("Name"+student[0].getName()+"age"+student[0].getAge()); student[0].setName("哪吒"); System.out.println(zhang.getName()); } }
1、Person[] student,定义了一个Person类型的引用变量,此时这个变量并未指向任何有效的内存区域,此时内存如下图:
2、student=new Person[2],数组初始化,系统在堆内存中为数组分配一块内存空间,两个引用类型,值为Null,如下图:
3、声明两个Person变量,zhang和li,此时在栈内存中分配两块内存用于存储变量zhang和li,在堆内存中分配两块内存用于存储zhang和li的数据,如下图:
4、接着讲zhang赋给数组的第一个元素,li赋给数组的第二个元素,此时数组的两个元素将指向有效区域,如下图: