1. วิธีการถ่ายโอนพารามิเตอร์
ในการแก้ปัญหาชื่อก่อนแนะนำวิธีการผ่านพารามิเตอร์ ปัจจุบันมีวิธีการถ่ายโอนพารามิเตอร์หลักสามวิธีสำหรับภาษาการเขียนโปรแกรมต่างๆ:
1. ผ่านตามมูลค่า
2. ผ่านการอ้างอิง
3. ผ่านตัวชี้
วิธีการแสดงค่าผ่านการถ่ายภาพ (ฟังก์ชั่น) ได้รับสำเนาของตัวแปรที่ผู้โทรจัดเตรียมไว้โดยไม่ต้องเปลี่ยนค่าของพารามิเตอร์ ค่าของตัวแปรที่ให้โดยผู้โทรถูกส่งผ่านโดยการอ้างอิง; ตัวชี้ค่าของค่า (ฟังก์ชั่น) ได้รับตัวชี้โดยตัวชี้โดยไม่ต้องเปลี่ยนค่าและที่อยู่ของตัวชี้ แต่ที่อยู่ชี้ไปที่ตัวชี้สามารถเปลี่ยนได้
2. วิธีการถ่ายโอนพารามิเตอร์ Java
น่าเสียดายที่มีวิธีการส่งผ่านพารามิเตอร์เพียงวิธีเดียวที่จัดทำโดย Java ซึ่งส่งผ่านด้วยค่า นั่นคือวิธีการได้รับสำเนาของค่าพารามิเตอร์ทั้งหมดและวิธีการไม่สามารถแก้ไขเนื้อหาของตัวแปรพารามิเตอร์ที่ส่งผ่านไปได้
ประเภทพารามิเตอร์วิธี Java สามารถแบ่งออกเป็นสองประเภท:
1. ประเภทข้อมูลพื้นฐาน
2. การอ้างอิงวัตถุ
เพื่อนที่มีประสบการณ์ในการพัฒนา Java รู้ว่าสำหรับประเภทข้อมูลพื้นฐานวิธี Java ไม่สามารถเปลี่ยนเนื้อหาของตัวแปรได้ เนื้อหาไม่สามารถแก้ไขได้โดยอ้างอิงถึงวัตถุของคลาสที่กำหนดเอง? สิ่งนี้สามารถอธิบายได้ด้วยตัวอย่างง่ายๆ รหัสมีดังนี้:
MyClass คลาส PUBPC {วัตถุส่วนตัว NUM; pubpc myclass (Object Num) {this.num = num; } pubpc object getNum () {return num; } pubpc void setNum (Object num) {this.num = num; - PUBPC คลาส Main {PUBPC คงที่การเปลี่ยนแปลงแบบคงที่ (MyClass myClass) {myclass.setNum (100); } pubpc โมฆะคงที่หลัก (สตริง [] args) {myclass a = myclass ใหม่ (10); System.out.println ("ค่าก่อนเรียกใช้วิธีการเปลี่ยนแปลงคือ:"+a.getNum ()); เปลี่ยน (a); System.out.println ("ค่าหลังจากเรียกวิธีการเปลี่ยนแปลงคือ:"+a.getNum ()); -ผลลัพธ์เอาต์พุตการดำเนินการของรหัสข้างต้นมีดังนี้:
จากผลลัพธ์จะเห็นได้ว่าวิธีการเปลี่ยนแปลงสามารถปรับเปลี่ยนสถานะของวัตถุ กล่าวอีกนัยหนึ่งวิธี Java สามารถเปลี่ยนสถานะพารามิเตอร์ของวัตถุ ดังนั้นวิธีนี้หมายความว่าวิธี Java ใช้การอ้างอิงสำหรับพารามิเตอร์ของประเภทข้อมูลที่กำหนดเอง (คลาสที่กำหนดเอง)? เพื่อยืนยันผลลัพธ์คุณสามารถเขียนตัวอย่างง่ายๆและคลาสที่กำหนดเองทั้งหมดยังคงเป็น MyClass ด้านบน รหัสมีดังนี้:
PUBPC void swap (MyClass A, MyClass B) {myClass tmp = a; a = b; B = TMP; } pubpc โมฆะคงที่หลัก (สตริง [] args) {myclass a = myclass ใหม่ (10); myclass b = myclass ใหม่ (100); System.out.println ("ค่าของ A ก่อนการแลกเปลี่ยนคือ:"+a.getNum ()); System.out.println ("ค่าของ B ก่อนการแลกเปลี่ยนคือ:"+b.getNum ()); swap (a, b); System.out.println ("ค่าของการแลกเปลี่ยนหลังคือ:"+a.getNum ()); System.out.println ("ค่า B หลังจากการแลกเปลี่ยนคือ:"+b.getNum ()); -ผลการดำเนินการมีดังนี้:
จากผลลัพธ์ข้างต้นเราสามารถพบว่าวิธีการ Java ยังคงใช้ค่าที่ส่งผ่านสำหรับพารามิเตอร์ที่ผ่านคลาสที่กำหนดเองไม่ใช่การอ้างอิงผ่าน แล้วทำไมวิธี Java จึงสามารถแก้ไขสถานะวัตถุได้?
คุณสามารถพิจารณากระบวนการดำเนินการเฉพาะของการเรียกใช้วิธีการเปลี่ยนแปลงเพื่อค้นหาคำตอบ
กระบวนการดำเนินการเฉพาะคือ:
MyClass เริ่มต้นเป็นสำเนาที่มีพารามิเตอร์จริง A ซึ่งเป็นการอ้างอิงถึงวัตถุ
วิธี SetNum ถูกนำไปใช้กับการอ้างอิงของวัตถุนี้ จำนวนวัตถุ MyClass ที่อ้างอิงโดย MyClass และ A เปลี่ยนเป็น 100
หลังจากวิธีการเสร็จสิ้นตัวแปรพารามิเตอร์ myClass จะไม่ถูกใช้อีกต่อไป และยังคงอ้างถึงวัตถุ MyClass ที่มีจำนวน 100 ดังที่แสดงในรูปด้านล่าง
ดังนั้นเหตุผลที่วิธีการ Java สามารถเปลี่ยนสถานะของพารามิเตอร์วัตถุคือวิธีการได้รับสำเนาของการอ้างอิงวัตถุและการอ้างอิงวัตถุและสำเนาอื่น ๆ ในวิธีการอ้างอิงถึงวัตถุเดียวกันในเวลาเดียวกัน
ตอนนี้มาสรุปพารามิเตอร์วิธี Java:
วิธีการไม่สามารถแก้ไขพารามิเตอร์ของประเภทข้อมูลพื้นฐาน
วิธีการสามารถเปลี่ยนสถานะของพารามิเตอร์วัตถุ
วิธีการไม่สามารถสร้างพารามิเตอร์วัตถุอ้างถึงวัตถุใหม่ (เหตุผลคืออ้างถึงกระบวนการดำเนินการเฉพาะเมื่อเรียกใช้วิธีการเปลี่ยนแปลง)
3. แลกเปลี่ยนค่าตัวเลขของตัวแปร
เนื่องจากคุณรู้เหตุผลอยู่แล้วจึงไม่ยากที่จะรู้เหตุผล โพสต์รหัสส่วนตัวของฉันโดยตรง:
PUBPC void swap (MyClass A, MyClass B) {Object TMP = A.getNum (); A.SetNum (B.GetNum ()); B.SetNum (TMP);}ผลการดำเนินการมีดังนี้:
การแลกเปลี่ยนนั้นถูกต้อง
ข้อมูลอ้างอิง: Java Core Technology เล่ม I.
บทความข้างต้นเกี่ยวกับ Java แลกเปลี่ยนวิธีการใช้งานเชิงตัวเลขของตัวแปรสองตัวคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น