Java นั้นเป็นการโทรผ่านค่า และค่าที่อยู่จะถูกส่งผ่านไปยังอ็อบเจ็กต์ การกำหนดค่าที่อยู่ใหม่จะเทียบเท่ากับการชี้ตำแหน่งใหม่ และจะไม่ส่งผลกระทบต่อเลเยอร์ภายนอก
และวัตถุจำนวนเต็มตรงนี้ก็มีลักษณะพิเศษเช่นกัน จริงๆแล้วมันอาจจะคล้ายกันกับ
คัดลอกรหัสรหัส ดังต่อไปนี้:
คลาสจำนวนเต็ม{
ค่า int สุดท้าย; //เมื่อกำหนดแล้วจะไม่สามารถเปลี่ยนแปลงได้
-
สิ่งนี้จะปรากฏขึ้น: ค่าที่อยู่ที่ส่งเมื่อโทรไม่สามารถเปลี่ยนเลเยอร์ด้านนอกได้ + ตัววัตถุเองไม่สามารถเปลี่ยนแปลงได้ ด้วยเหตุนี้ ค่านี้จึงไม่สามารถเปลี่ยนแปลงได้
มีวิธีแก้ปัญหามากมาย
1. สไตล์ Java คือการใช้ค่าตอบแทนสำหรับค่าเดียว return i; กำหนด i=foo(); ภายนอก; ใช้อาร์เรย์หรือวัตถุสำหรับหลายค่า
2. ผ่านชั้นเรียนการห่อหุ้มของคุณเอง คลาส MutableInteger{ ค่า int;}
3. ส่งผ่านวัตถุจำนวนเต็มอะตอมมิก AtomicInteger เฉพาะ
คัดลอกรหัสรหัส ดังต่อไปนี้:
โมฆะคงที่สาธารณะหลัก (พารามิเตอร์ String []) {
AtomicInteger i = AtomicInteger ใหม่ (40);
i.intValue();
System.out.println(i);
-
การเปลี่ยนแปลงโมฆะคงที่สาธารณะ (AtomicInteger i) {
i.set(55);
-
คุณสามารถเปลี่ยนค่าได้หลังจากผ่านแล้ว
ตัวเลือกที่แนะนำ 1 พยายามหลีกเลี่ยง