1. อาร์เรย์ในหน่วยความจำ

ในตัวอย่างก่อนหน้านี้ ภาพประกอบไม่ถูกต้องเล็กน้อย

เมื่อสร้างอาร์เรย์ (เช่น เมื่อสร้างสตริง) จะมีการจัดสรรหน่วยความจำสองบล็อกแยกกัน: บล็อกหนึ่งสำหรับจัดเก็บอาร์เรย์( คอนเทนเนอร์) และบล็อกที่ สองสำหรับตัวแปรที่เก็บที่อยู่ ของมัน รูปภาพด้านล่างแสดงถึงการชี้แจงนี้:

อาร์เรย์ในหน่วยความจำ

หน่วยความจำที่จัดสรรให้กับอาร์เรย์ของ10 intองค์ประกอบและint[]ตัวแปรที่เก็บแอดเดรสของintอาร์เรย์ จะแสดงเป็นสีเขียว

สำหรับการเปรียบเทียบ ตัวแปรธรรมดาintที่เก็บค่า199จะแสดงเป็นสีน้ำเงิน

นี่เป็นสิ่งที่ชวนให้นึกถึงการจัดเก็บสตริงในหน่วยความจำ คุณว่าไหม

ถูกต้องสตริง และเช่นเดียวกับเมื่อคุณทำงานกับสตริง คุณสามารถกำหนดตัวแปรอาร์เรย์ให้กันและกันได้:

รหัส คำอธิบาย
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
สร้างอาร์เรย์ของ10 intองค์ประกอบ
กำหนดค่า4ให้กับเซลล์ด้วย2ดัชนี
กำหนดค่า9ให้กับเซลล์ด้วย7ดัชนี
ในbตัวแปร ให้บันทึกที่อยู่ที่เก็บไว้ในaตัวแปร
ตอนนี้aและbชี้ไปที่วัตถุอาร์เรย์เดียวกันในหน่วยความจำ
ในเซลล์ของวัตถุอาร์เรย์ที่มีดัชนี9ให้เขียนผลรวมของค่าที่เก็บไว้ในเซลล์2(ซึ่งเก็บค่า4) และ7(ซึ่งเก็บค่า9)

วัตถุอาร์เรย์ยังคงอยู่ในตำแหน่งเดิม และaตัวแปร และbเก็บที่อยู่เดียวกัน (อ้างอิง) ไปยังวัตถุเดียวกัน ดูที่รูปภาพ:

อาร์เรย์ในหน่วยความจำ2

2. รายละเอียดเพิ่มเติมเกี่ยวกับการทำงานกับอาร์เรย์

คุณสามารถสร้างอาร์เรย์ขององค์ประกอบประเภทใดก็ได้ ในการทำเช่นนี้ เพียงเขียนวงเล็บเหลี่ยมหลังชื่อประเภท โดยทั่วไป การสร้างอาร์เรย์จะมีลักษณะดังนี้:

type[] name = new type[number];

โดยที่typeคือประเภทขององค์ประกอบที่เราจะเก็บไว้ในอาร์เรย์ Nameคือชื่อของตัวแปรที่เราจะใช้อ้างถึงอาร์เรย์ และnumberคือจำนวนเซลล์ในอาร์เรย์

ตัวอย่างด้านบนคือรูปแบบมาตรฐานสำหรับการสร้างตัวแปรอาร์เรย์และอ็อบเจกต์อาร์เรย์ ในความเป็นจริงแล้ว สิ่งเหล่านี้เป็นสองสิ่งที่แยกจากกัน

คุณสามารถสร้างตัวแปรอาร์เรย์แยกต่างหากจากวัตถุอาร์เรย์:

type[] name;
name = new type[number];

และอีกหนึ่งจุดที่ไม่สำคัญ:

คุณสามารถใช้ตัวแปรหรือนิพจน์ทั้งหมดเป็นอาร์เรย์ ดัชนีและจำนวนองค์ประกอบอาร์เรย์

ตัวอย่าง:

รหัส คำอธิบาย
int n = 100;
int[] a = new int[n];
สร้างอาร์เรย์ของnองค์ประกอบ
int n = 100;
int[] a = new int[n * 2 + 3];
สร้างอาร์เรย์ที่มี203องค์ประกอบ
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
สำคัญ:
อย่างไรก็ตาม คุณควรทราบว่าหากคุณพยายามเข้าถึงเซลล์อาร์เรย์โดยใช้ดัชนีที่ไม่มีอยู่ในอาร์เรย์ (ในตัวอย่างของเรา นั่นหมายถึงจำนวนเต็มใดๆ ที่ไม่อยู่ในช่วง ) โปรแกรมจะหยุดทำงานพร้อม0..99กับArrayIndexOfBoundExceptionหมายความว่าดัชนีอยู่นอกขอบเขตของอาร์เรย์

3. ความยาวของอาร์เรย์

ดังที่คุณเห็นในตัวอย่างก่อนหน้านี้ คุณสามารถสร้างตัวแปรอาร์เรย์ด้วยตัวมันเอง จากนั้นจึงกำหนดค่า (การอ้างอิงไปยังออบเจกต์อาร์เรย์) ให้กับตัวแปรนั้นในโค้ด คุณสามารถทำได้:

รหัส คำอธิบาย
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
สร้างตัวแปรอาร์เรย์ที่มีประเภทเป็นint[]
ถ้าaตัวแปรน้อยกว่า10ให้
สร้างอาร์เรย์ของ10องค์ประกอบ
มิฉะนั้น
ให้สร้างอาร์เรย์ของ20องค์ประกอบ

และตอนนี้คุณสามารถทำอะไรกับอาร์เรย์ดังกล่าวได้อีก คุณรู้ได้อย่างไรว่ามีกี่องค์ประกอบในนั้น?

เพื่อช่วยในเรื่องนี้ อาร์เรย์มีคุณสมบัติพิเศษ (ตัวแปร) lengthชื่อ คุณสามารถค้นหาความยาวของอาร์เรย์โดยใช้นิพจน์นี้:

array.length;

นี่arrayคือชื่อของตัวแปรอาร์เรย์และlengthเป็นชื่อของคุณสมบัติของอาร์เรย์ ค่าของlengthคุณสมบัติไม่สามารถเปลี่ยนแปลงได้: lengthคุณสมบัตินั้นสามารถกำหนดให้กับตัวแปรอื่น ๆ ได้ แต่ไม่สามารถกำหนดอะไรให้กับมันได้ (หากคุณพยายามทำเช่นนี้ โปรแกรมจะไม่ทำการคอมไพล์)

เราสามารถดำเนินการต่อจากตัวอย่างก่อนหน้านี้ได้ดังนี้:

รหัส คำอธิบาย
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
สร้างตัวแปรอาร์เรย์ที่มีประเภทเป็นint[]
ถ้าaตัวแปรน้อยกว่า10ให้
สร้างอาร์เรย์ของ10องค์ประกอบ
มิฉะนั้น
ให้สร้างอาร์เรย์ของ20องค์ประกอบ
วนซ้ำองค์ประกอบทั้งหมดของอาร์เรย์: จาก0ถึงความยาวarray.length - 1

4. สรุปข้อเท็จจริงเกี่ยวกับอาร์เรย์ในภาษาจาวา

สรุปสิ่งที่เรารู้เกี่ยวกับอาร์เรย์:

ข้อเท็จจริง 1.อาร์เรย์ประกอบด้วยเซลล์จำนวนมาก

ข้อเท็จจริงที่ 2คุณเข้าถึงเซลล์ที่ต้องการโดยใช้หมายเลข (ดัชนี)

ข้อเท็จจริงที่ 3เซลล์ทั้งหมดเป็นประเภทเดียวกัน

ข้อเท็จจริงที่ 4ค่าเริ่มต้นของเซลล์ทั้งหมดคือ 0 (ถ้าเซลล์เก็บตัวเลข) null(ถ้าเซลล์เก็บการอ้างอิงวัตถุ) หรือfalse(ถ้าเซลล์เก็บbooleanค่า) คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับค่าเริ่มต้นในบทนี้

ข้อเท็จจริง 5. String[] listเป็นเพียงการประกาศตัวแปร สิ่งนี้ไม่ได้สร้างคอนเทนเนอร์ (วัตถุอาร์เรย์) เอง ในการใช้ตัวแปร ก่อนอื่นคุณต้องสร้างอาร์เรย์ (คอนเทนเนอร์) และกำหนดให้กับตัวแปร ดูตัวอย่างด้านล่าง

ข้อเท็จจริง 6.เมื่อเราสร้างอ็อบเจกต์อาร์เรย์ (คอนเทนเนอร์) เราต้องระบุขนาดของออบเจกต์ เช่น จำนวนเซลล์ที่มี สิ่งนี้ทำได้ด้วยคำสั่งเช่น: new TypeName[n];

ข้อเท็จจริงที่ 7ความยาวของอาร์เรย์สามารถพบได้โดยใช้.lengthคุณสมบัติ

ข้อเท็จจริงที่ 8หลังจากสร้างอาร์เรย์แล้ว คุณไม่สามารถเปลี่ยนประเภทขององค์ประกอบหรือจำนวนองค์ประกอบที่เก็บได้

รหัส คำอธิบาย
String s;
String[] list;
sคือnull
list_null
list = new String[10];
int n = list.length;
ตัวแปรlistเก็บการอ้างอิงถึงวัตถุ: อาร์เรย์สตริงที่ประกอบด้วย10องค์ประกอบ
nเป็น10
list = new String[0];

ตอนนี้listหมายถึงอาร์เรย์ของ0องค์ประกอบ มีอาร์เรย์อยู่ แต่ไม่สามารถเก็บองค์ประกอบใดๆ

list = null;
System.out.println(list[1]);
จะเกิดข้อยกเว้น (ข้อผิดพลาดของโปรแกรม) นั่นคือโปรแกรมจะหยุดทำงาน listเก็บการอ้างอิงถึงnull
list = new String[10];
System.out.println(list[10]);
ข้อยกเว้นอาร์เรย์ที่อยู่นอกขอบเขต (ข้อผิดพลาดของโปรแกรม) จะถูกสร้างขึ้น
หากlistเก็บ10องค์ประกอบ/เซลล์ ดัชนีที่ถูกต้องคือ: 0 1 2 3 4 5 6 7 8 910องค์ประกอบ