การส่งค่าใน Java
ทำความเข้าใจการส่งค่าใน Java: ชนิดพื้นฐานกับการอ้างอิง การกำหนดค่าใหม่กับการเปลี่ยนแปลงข้อมูล รวมถึงข้อผิดพลาดที่พบบ่อยของอาร์เรย์และข้อมูลเปลี่ยนแปลงไม่ได้
การส่งค่าใน Java เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวมการส่งค่าโดยสำเนา
เป้าหมาย: เรียนรู้วิธีที่ Java ส่งพารามิเตอร์ เปรียบเทียบชนิดข้อมูลพื้นฐานกับการอ้างอิง การกำหนดค่าใหม่กับการเปลี่ยนแปลงวัตถุ อาร์เรย์ และการไม่เปลี่ยนรูป
การคัดลอกชนิดข้อมูลพื้นฐาน
ชนิดข้อมูลพื้นฐานจะถูกส่งโดยค่า เมธอดที่ถูกเรียกจะได้รับสำเนา การกำหนดค่าใหม่ให้พารามิเตอร์จะไม่เปลี่ยนตัวแปรของผู้เรียกใช้
public class Main {
static void inc(int x) {
x = x + 1; // modifies the local copy only
}
public static void main(String[] args) {
int a = 5;
inc(a);
System.out.println("a after inc(a) = " + a); // still 5
}
}
การอ้างอิง: เปลี่ยนแปลงกับกำหนดค่าใหม่
สำหรับวัตถุ การอ้างอิง จะถูกคัดลอก การเปลี่ยนแปลงวัตถุผ่านการอ้างอิงนั้นจะส่งผลต่อวัตถุของผู้เรียกใช้ แต่การกำหนดค่าใหม่ให้พารามิเตอร์จะไม่ส่งผลดังกล่าว
public class Main {
static class Box { int n; }
static void setTo999(Box b) { b.n = 999; } // mutate via copied reference
static void reassign(Box b) { b = new Box(); b.n = 123; } // reassign local copy only
public static void main(String[] args) {
Box bx = new Box();
bx.n = 10;
setTo999(bx);
System.out.println("after setTo999: bx.n = " + bx.n); // 999
reassign(bx);
System.out.println("after reassign: bx.n = " + bx.n); // still 999
}
}
อาร์เรย์: เปลี่ยนแปลงกับกำหนดค่าใหม่
อาร์เรย์เป็นวัตถุ การเปลี่ยนแปลงอาร์เรย์จะส่งผลต่อผู้เรียกใช้ แต่การกำหนดค่าใหม่ให้พารามิเตอร์จะไม่แทนที่อาร์เรย์ของผู้เรียกใช้
public class Main {
static void fillZero(int[] a) {
for (int i = 0; i < a.length; i = i + 1) a[i] = 0; // mutate caller array
}
static void replace(int[] a) {
a = new int[] {9, 9, 9}; // reassign local copy of the reference
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fillZero(arr);
System.out.println("after fillZero: " + arr[0] + "," + arr[1] + "," + arr[2]); // 0,0,0
replace(arr);
System.out.println("after replace: " + arr[0] + "," + arr[1] + "," + arr[2]); // still 0,0,0
}
}
ไม่เปลี่ยนรูปกับเปลี่ยนรูปได้
String ไม่เปลี่ยนรูป (ส่งกลับวัตถุใหม่) ส่วน StringBuilder เปลี่ยนรูปได้ (เปลี่ยนแปลงอินสแตนซ์เดิม)
public class Main {
static void tryChangeString(String s) {
s = s + "!"; // new String; original unchanged
}
static void changeBuilder(StringBuilder sb) {
sb.append("!"); // mutates same object
}
public static void main(String[] args) {
String s = "hi";
tryChangeString(s);
System.out.println("after tryChangeString: " + s); // "hi"
StringBuilder sb = new StringBuilder("hi");
changeBuilder(sb);
System.out.println("after changeBuilder: " + sb.toString()); // "hi!"
}
}
สลับค่าอย่างถูกต้อง
เนื่องจากพารามิเตอร์เป็นสำเนา การสลับค่าชนิดข้อมูลพื้นฐานภายในเมธอดจึงไม่ส่งผลต่อผู้เรียกใช้ ให้ส่งค่าชุดใหม่กลับ หรือใช้วัตถุสำหรับเก็บค่า
public class Main {
static void trySwap(int a, int b) {
int t = a; a = b; b = t; // swaps local copies only
}
static int[] swap(int a, int b) {
return new int[] { b, a }; // return results to the caller
}
public static void main(String[] args) {
int x = 1, y = 2;
trySwap(x, y);
System.out.println("after trySwap: x=" + x + ", y=" + y); // 1,2
int[] res = swap(x, y);
x = res[0]; y = res[1];
System.out.println("after swap: x=" + x + ", y=" + y); // 2,1
}
}
ตรวจสอบการส่งค่าโดยสำเนา
ตรวจสอบอย่างรวดเร็ว: ข้อใดเกี่ยวกับการส่งพารามิเตอร์ของ Java ถูกต้อง
สรุปทบทวนและขั้นถัดไป
สรุปทบทวน: คุณได้เห็นความแตกต่างระหว่างชนิดข้อมูลพื้นฐานกับการอ้างอิง การเปลี่ยนแปลงวัตถุกับการกำหนดค่าใหม่ อาร์เรย์ในฐานะวัตถุ การไม่เปลี่ยนรูป และรูปแบบการสลับค่าที่ปลอดภัยแล้ว ขั้นถัดไป: เมธอดสแตติกกับเมธอดอินสแตนซ์
คำถามที่พบบ่อย
บทเรียน “การส่งค่าใน Java” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การส่งค่าใน Java” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การส่งค่าใน Java”
ทำความเข้าใจการส่งค่าใน Java: ชนิดพื้นฐานกับการอ้างอิง การกำหนดค่าใหม่กับการเปลี่ยนแปลงข้อมูล รวมถึงข้อผิดพลาดที่พบบ่อยของอาร์เรย์และข้อมูลเปลี่ยนแปลงไม่ได้ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “การส่งค่าใน Java” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ