0Pricing
Java Academy · บทเรียน

การส่งค่าใน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การส่งค่าใน Java
  2. เมธอด static กับเมธอดของอินสแตนซ์
  3. การแยกปัญหาด้วยเมธอดและโค้ดสะอาด
← กลับไปที่ Java Academy