พิจารณาคำถามต่อไปนี้ก่อนเริ่มบทความนี้
จะรับความยาวของอาร์เรย์ได้อย่างไรโดยไม่ต้องใช้ IDE ใด ๆ กับฟังก์ชั่นการเติมข้อความอัตโนมัติ? และจะได้รับความยาวของสตริงได้อย่างไร?
ฉันได้ถามโปรแกรมเมอร์ในระดับต่าง ๆ รวมถึงทั้งระดับจูเนียร์และระดับกลาง ไม่มีใครสามารถตอบคำถามนี้ได้อย่างถูกต้องและมั่นใจ (ถ้าคุณสามารถตอบคำถามนี้ได้อย่างถูกต้องและมั่นใจมันพิสูจน์ได้ว่าคุณดีกว่าความรู้นี้มากกว่าโปรแกรมเมอร์ระดับกลางส่วนใหญ่) เนื่องจาก IDEs จำนวนมากมีฟังก์ชั่นการสมบูรณ์ของรหัสผู้พัฒนาสามารถเข้าใจปัญหาต่าง ๆ ได้อย่างผิวเผินมาก
คำตอบที่ถูกต้องสำหรับคำถามข้างต้นควรมีดังนี้:
int [] arr = new int [3]; system.out.println (arr.length); // ใช้ความยาวเพื่อรับระดับของสตริงอาร์เรย์ str = "abc"; system.out.println (str.length ()); // ใช้ความยาว () เพื่อรับความยาวของสตริง
ดังนั้นคำถามคือทำไมอาร์เรย์จึงมีแอตทริบิวต์ความยาว แต่สตริงไม่ได้? หรือทำไมสตริงมีวิธี length() แต่อาร์เรย์ไม่ได้?
ทำไมอาร์เรย์ถึงมีแอตทริบิวต์ความยาว?
ขั้นแรกอาร์เรย์คือวัตถุคอนเทนเนอร์ที่มีจำนวนค่าคงที่ของประเภทเดียวกัน เมื่อสร้างอาร์เรย์ความยาวของมันจะได้รับการแก้ไข ความยาวของอาร์เรย์สามารถใช้เป็นความยาวของตัวแปรอินสแตนซ์สุดท้าย ดังนั้นความยาวจึงถือได้ว่าเป็นคุณลักษณะของอาร์เรย์
มีสองวิธีในการสร้างอาร์เรย์:
1. สร้างอาร์เรย์ผ่านนิพจน์อาร์เรย์
2. สร้างอาร์เรย์โดยเริ่มต้นค่า
ไม่ว่าจะด้วยวิธีใดเมื่อสร้างอาร์เรย์ขนาดของมันจะได้รับการแก้ไข
วิธีการสร้างอาร์เรย์โดยใช้นิพจน์มีดังนี้ซึ่งระบุประเภทองค์ประกอบมิติของอาร์เรย์และความยาวของอาร์เรย์อย่างน้อยหนึ่งมิติ
วิธีการประกาศนี้ตรงตามข้อกำหนดเนื่องจากระบุความยาวของมิติ (อาร์เรย์มีประเภท int มิติคือ 2 และมิติแรกคือ 3)
int [] [] arr = new int [3] [];
เมื่อสร้างอาร์เรย์โดยใช้การเริ่มต้นอาร์เรย์คุณต้องให้ค่าเริ่มต้นทั้งหมด แบบฟอร์มคือการใช้ {และ} เพื่อรวมค่าเริ่มต้นทั้งหมดเข้าด้วยกันและแยกออก
int [] arr = {1,2,3};บันทึก:
อาจมีคำถามที่นี่ เนื่องจากขนาดอาร์เรย์ถูกระบุเมื่อเริ่มต้น, int[][] arr = new int[3][];定อาร์เรย์โดยไม่ให้ขนาดของมิติที่สองของอาร์เรย์ แล้วความยาวของ arr นี้ "กำหนด" นี้เป็นอย่างไร?
ในความเป็นจริงความยาวของ arr คือ 3 ในความเป็นจริงทุกอาร์เรย์ในชวาไม่ว่าจะมีมิติเท่าไหร่จริง ๆ แล้วเป็นอาร์เรย์หนึ่งมิติ ตัวอย่างเช่น ARR, 3 ช่องว่างได้รับการจัดสรรแต่ละพื้นที่เก็บที่อยู่ของอาร์เรย์หนึ่งมิติซึ่งกลายเป็นอาร์เรย์ "สองมิติ" แต่สำหรับ ARR ความยาวของเขาคือ 3
int [] [] a = new int [3] []; system.out.println (A.length); // 3int [] [] b = new int [3] [5]; system.out.println (b.length); // 3
เหตุใดจึงไม่มีคลาสอาร์เรย์เช่นสตริงที่กำหนดไว้ใน Java
เนื่องจากอาร์เรย์ยังเป็นวัตถุรหัสต่อไปนี้จึงถูกกฎหมายเช่นกัน:
Object OBJ = ใหม่ int [10];
อาร์เรย์มีวิธีการทั้งหมดที่สืบทอดมาจากวัตถุ (ความสัมพันธ์ในการสืบทอดของอาร์เรย์ใน Java) ยกเว้น clone () ทำไมไม่มีคลาสอาร์เรย์? ไม่มีไฟล์ array.java ใน Java คำอธิบายง่ายๆคือมันถูกซ่อนไว้ (หมายเหตุ: อาร์เรย์ใน Java ค่อนข้างคล้ายกับชนิดข้อมูลพื้นฐานพวกเขาเป็นประเภทในตัวและไม่มีคลาสจริงที่สอดคล้องกับมัน) คุณสามารถคิดถึงคำถามนี้ - ถ้ามีคลาสอาร์เรย์มันจะเป็นอย่างไร? มันจะต้องมีอาร์เรย์เพื่อเก็บองค์ประกอบอาร์เรย์ทั้งหมดใช่ไหม? ดังนั้นจึงไม่ใช่ความคิดที่ดีที่จะกำหนดคลาสอาร์เรย์ (หมายเหตุของนักแปล: ที่นี่อาจสับสนเล็กน้อยเหตุผลก็คล้ายกับ: ปัญหาของไก่ที่เกิดมาพร้อมกับไข่และไก่และคำอุปมาอาจไม่เหมาะสมมากโปรดเข้าใจด้วยตัวเอง)
ในความเป็นจริงเราสามารถรับนิยามคลาสของอาร์เรย์ผ่านรหัสต่อไปนี้:
int [] arr = new int [3]; system.out.println (arr.getClass ());
เอาท์พุท:
ชั้นเรียน [i
"คลาส [i" หมายถึงลายเซ็นของประเภทรันไทม์ของวัตถุคลาสที่มีประเภทสมาชิกเป็นอาร์เรย์ของ int "
เหตุใดสตริงจึงมีวิธีความยาว ()
โครงสร้างข้อมูลที่อยู่เบื้องหลังสตริงเป็นอาร์เรย์ถ่านดังนั้นจึงไม่จำเป็นต้องกำหนดคุณสมบัติที่ไม่จำเป็น (เนื่องจากคุณสมบัติมีอยู่แล้วในค่าถ่าน) ซึ่งแตกต่างจาก C, อาร์เรย์ของถ่านใน Java ไม่เท่ากับสตริงแม้ว่ากลไกภายในของสตริงจะถูกนำมาใช้โดยอาร์เรย์ถ่าน (หมายเหตุ: ในภาษา C ไม่มีคลาสสตริงและการกำหนดสตริงมักจะใช้รูปแบบของ char string[6] = "hollis"; )
หมายเหตุ: มีวิธีต่อไปนี้ในการแปลงถ่าน [] เป็นสตริง:
char [] s = {'a', 'b', 'c'}; สตริงสตริง 1 = s.toString (); สตริงสตริง 2 = สตริงใหม่ (s); สตริงสตริง 3 = string.valueof (s);สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะเป็นประโยชน์กับทุกคนในการเรียนรู้หรือใช้ Java หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร