最近、JAVAの基本をもう一度見直し、Li Gang氏による「Javaプログラマーを壊すための16のレッスン」を読み、この機会とインスピレーションを利用して、JAVAの見落とされがちな知識のポイントを要約する予定です。
配列の初期化
JAVAは典型的な静的言語であるため、Java配列は静的です。つまり、配列が初期化されるとき、配列の長さは不変です。配列オブジェクトは、Java配列を使用する前に初期化する必要があります。いわゆる初期化とは、配列のすべての要素にメモリスペースを割り当て、各配列要素の初期値を指定することです。
JAVAの配列変数は参照型変数であり、配列オブジェクト自体ではありません。配列変数が有効な配列オブジェクトを指している限り、その配列変数はプログラムで使用できます。(配列変数、配列オブジェクト、および配列要素の違いに注意してください)
配列変数は単なる参照変数(C言語のポインターにいくらか似ています)であり、通常はスタックメモリに格納されます(ヒープメモリに配置することもできます)。配列オブジェクトは、ヒープに格納される連続メモリ空間です。メモリ。配列の初期化は、実際には配列変数の初期化ではなく、配列オブジェクトの初期化です。つまり、連続したメモリスペースが配列オブジェクトに割り当てられ、このメモリスペースの長さは配列の長さです。 。
public class ArrayTest {
public static void main(String[] args) {
//采用静态初始化方式初始化第1个数组
String[] books = new String[]{
"疯狂java讲义",
"轻量级Java EE企业级应用实战",
"疯狂Ajax讲义",
"疯狂XML讲义"
} ;
//采用静态初始化的简化方式初始化第2个数组
String[] names = {
"孙悟空",
"猪八戒",
"白骨精"
};
//采用动态初始化方式初始化第3个数组
String[] strArr = new String[5];
//测试
System.out.println("第一个数组长度为:"+books.length);
System.out.println("第二个数组长度为:"+names.length);
System.out.println("第三个数组长度为:"+strArr.length);
//让books数组变量,strArr数组变量指向names所引用的数组
books = names;
strArr = names;
System.out.println("------------------");
System.out.println("books数组长度为:"+books.length);
System.out.println("strArr数组长度为:"+strArr.length);
//改变books数组变量所引用的数组的第二个元素值
books[1] = "唐僧";
System.out.println("names数组的第二个元素为:"+books[1]);
}
}
第一个数组长度为:4
第二个数组长度为:3
第三个数组长度为:5
------------------
books数组长度为:3
strArr数组长度为:3
names数组的第二个元素为:唐僧
メモリ制御
次の図は、メモリ内の配列参照変数と配列オブジェクトの概略図です。
すべてのローカル変数は、基本型の変数であろうと参照型変数であろうと、スタックメモリに格納され、それぞれのメソッドスタック領域に格納されますが、参照型変数によって参照されるオブジェクト(配列、通常のJavaオブジェクト)は常に格納されます。ヒープメモリ内。
配列を使用する
配列参照変数が有効な配列オブジェクトを指している場合、プログラムは配列参照変数を介して配列オブジェクトにアクセスできます。Java言語では、ヒープメモリ内のデータに直接アクセスできないため、ヒープメモリ内の配列オブジェクトに直接アクセスすることはできません。プログラムは、配列参照変数を介して配列にアクセスします。
多次元配列の本質は、依然として1次元配列です。JAVAプログラムが配列を使用する場合、プログラムは、コードの表面だけでなく、メモリ制御の観点から制御する必要があります。