เมื่อวัตถุถูกส่งผ่านเป็นพารามิเตอร์ไปยังวิธีการวิธีนี้สามารถเปลี่ยนคุณสมบัติของวัตถุและส่งคืนผลลัพธ์ที่เปลี่ยนแปลง มันเป็นค่าผ่านหรือผ่านการอ้างอิงที่นี่?
คำตอบ: มันคือการโอนค่า ภาษาการเขียนโปรแกรม Java ผ่านพารามิเตอร์ที่มีค่าเท่านั้น เมื่ออินสแตนซ์ของวัตถุถูกส่งไปยังวิธีเป็นพารามิเตอร์ค่าของพารามิเตอร์คือสำเนาของการอ้างอิงของวัตถุ ชี้ไปที่วัตถุเดียวกันเนื้อหาของวัตถุสามารถเปลี่ยนแปลงได้ในวิธีที่เรียกว่า แต่การอ้างอิงของวัตถุ (ไม่ใช่สำเนาของการอ้างอิง) จะไม่เปลี่ยนแปลง
พารามิเตอร์ Java ไม่ว่าจะเป็นประเภทดั้งเดิมหรือประเภทอ้างอิงส่งสำเนาทั้งหมด (มีคำพูดอื่นคือการส่งผ่านค่า แต่จะดีกว่าที่จะเข้าใจว่าการส่งสำเนาและค่าที่ส่งผ่านมักจะสัมพันธ์กับที่อยู่ที่ผ่าน)
หากประเภทพารามิเตอร์เป็นประเภทดั้งเดิมการส่งผ่านเป็นสำเนาของพารามิเตอร์นี้นั่นคือค่าของพารามิเตอร์ดั้งเดิมซึ่งเหมือนกับค่าที่ผ่านมาที่กล่าวถึงก่อนหน้านี้ หากค่าของการคัดลอกมีการเปลี่ยนแปลงในฟังก์ชันค่าดั้งเดิมจะไม่เปลี่ยนแปลง
หากประเภทพารามิเตอร์เป็นประเภทการอ้างอิงสำเนาของพารามิเตอร์อ้างอิงนี้จะถูกส่งผ่านและสำเนานี้จะเก็บที่อยู่ของพารามิเตอร์ หากที่อยู่ของสำเนานี้ไม่เปลี่ยนแปลงในฟังก์ชั่น แต่ค่าในที่อยู่มีการเปลี่ยนแปลงการเปลี่ยนแปลงภายในฟังก์ชั่นจะส่งผลกระทบต่อพารามิเตอร์ที่ผ่าน หากที่อยู่ของสำเนามีการเปลี่ยนแปลงในฟังก์ชั่นเช่นใหม่แล้วสำเนาจะชี้ไปที่ที่อยู่ใหม่ ในเวลานี้พารามิเตอร์ที่เข้ามายังคงชี้ไปที่ที่อยู่เดิมดังนั้นค่าของพารามิเตอร์จะไม่เปลี่ยนแปลง
ตัวอย่าง:
Paramtest คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) { / ** * ทดสอบ 1: วิธีการไม่สามารถแก้ไขพารามิเตอร์ตัวเลข * / system.out.println ("การทดสอบ triplevalue:"); สองเปอร์เซ็นต์ = 10; System.out.println ("ก่อนหน้า: เปอร์เซ็นต์ =" + เปอร์เซ็นต์); triplevalue (เปอร์เซ็นต์); System.out.println ("หลังจาก: เปอร์เซ็นต์ =" + เปอร์เซ็นต์); /** * ทดสอบ 2: วิธีการสามารถเปลี่ยนสถานะของพารามิเตอร์วัตถุ */system.out.println ("/ntesting triplesalary:"); พนักงาน Harry = พนักงานใหม่ ("Harry", 50000); System.out.println ("ก่อนหน้า: เงินเดือน =" + harry.getSalary ()); Triplesalary (Harry); System.out.println ("หลังจาก: เงินเดือน =" + harry.getSalary ()); /** * ทดสอบ 3: วิธีการไม่สามารถแนบวัตถุใหม่กับพารามิเตอร์วัตถุ */system.out.println ("/ntesting swap:"); พนักงาน A = พนักงานใหม่ ("Alice", 70000); พนักงาน B = พนักงานใหม่ ("Bob", 60000); System.out.println ("ก่อนหน้า: a =" + a.getName ()); System.out.println ("ก่อนหน้า: b =" + b.getName ()); swap (a, b); System.out.println ("หลังจาก: a =" + a.getName ()); System.out.println ("หลังจาก: b =" + b.getName ()); } การแลกเปลี่ยนโมฆะแบบคงที่ส่วนตัว (พนักงาน X, พนักงาน y) {พนักงานอุณหภูมิ = x; x = y; y = อุณหภูมิ; System.out.println ("End of Method: x =" + x.getName ()); System.out.println ("End of Method: y =" + y.getName ()); } โมฆะคงที่ส่วนตัวสามครั้ง (พนักงาน x) {x.raisesalary (200); System.out.println ("End of Method: salary =" + x.getSalary ()); } โมฆะคงที่ส่วนตัว triplevalue (double x) {x = 3*x; System.out.println ("End of Method x ="+x); -แสดงผลลัพธ์:
การทดสอบ triplevalue: ก่อน: เปอร์เซ็นต์ = 10.0End ของวิธี x = 30.0 หลังจาก: เปอร์เซ็นต์ = 10.0 การทดสอบสามครั้ง: ก่อนหน้า: เงินเดือน = 50000.0END ของวิธี: เงินเดือน = 150000.0 หลังจาก: เงินเดือน = 150000.0 y = alicafter: a = alice // การอ้างอิงตัวเองไม่ได้เปลี่ยนหลังจาก: b = bob
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น