คำสั่ง switch ในภาษา Java และ C# แตกต่างกันอย่างไร?

Jan 22, 2026

ฝากข้อความ

เฮ้! ในฐานะซัพพลายเออร์สวิตช์ ฉันติดต่อกับสวิตช์ทุกประเภทในโลกอุตสาหกรรม แต่วันนี้ ฉันจะเปลี่ยนเกียร์เล็กน้อยและพูดถึงสิ่งที่แตกต่างออกไป - ความแตกต่างระหว่างคำสั่ง switch ใน Java และ C# อาจดูแปลกไปจากการควบคุมปกติของฉันเล็กน้อย แต่เชื่อฉันเถอะ การทำความเข้าใจแนวคิดการเขียนโปรแกรมเหล่านี้จะทำให้คุณมีมุมมองที่ดีขึ้นเกี่ยวกับวิธีการทำงานของระบบต่างๆ และนั่นมีประโยชน์อย่างยิ่งในธุรกิจสวิตช์

เริ่มจากพื้นฐานกันก่อน คำสั่ง switch ทั้งใน Java และ C# เป็นคำสั่ง control flow ที่ช่วยให้คุณสามารถเลือกบล็อคโค้ดหนึ่งในหลายบล็อคที่จะดำเนินการตามค่าของนิพจน์ เหมือนทางแยกหลายทางในถนน ขึ้นอยู่กับมูลค่าที่คุณกำลังเผชิญอยู่ คุณจะใช้เส้นทางที่แตกต่างออกไป

ไวยากรณ์และโครงสร้าง

ใน Java ไวยากรณ์พื้นฐานของคำสั่ง switch มีลักษณะดังนี้:

6GK5008-0BA10-1AB2 Electrical Switch XB0086GK5008-0BA10-1AB2 Electrical Switch

switch(expression) { case value1: // รหัสที่จะดำเนินการถ้า expression == value1 พัง; case value2: // รหัสที่จะดำเนินการถ้า expression == value2 พัง; ค่าเริ่มต้น: // รหัสที่จะดำเนินการหากนิพจน์ไม่ตรงกับกรณีใด ๆ }

ที่การแสดงออกสามารถเป็นประเภทได้ไบต์,สั้น,ถ่าน,ภายใน,แจกแจงประเภทสตริง(ตั้งแต่ Java 7) และคลาส wrapper บางคลาสเช่นไบต์,สั้น,อักขระ, และจำนวนเต็ม. แต่ละกรณีตามด้วยค่าเฉพาะ และหยุดพักคำสั่งใช้เพื่อออกจากบล็อกสวิตช์เมื่อพบรายการที่ตรงกัน หากคุณลืมหยุดพักการดำเนินการจะ "ผ่านไป" ในกรณีถัดไป ซึ่งอาจนำไปสู่พฤติกรรมที่ไม่คาดคิดได้

ใน C# ไวยากรณ์ค่อนข้างคล้ายกัน:

switch(expression) { case value1: // รหัสที่จะดำเนินการถ้า expression == value1 พัง; case value2: // รหัสที่จะดำเนินการถ้า expression == value2 พัง; ค่าเริ่มต้น: // รหัสที่จะดำเนินการหากนิพจน์ไม่ตรงกับกรณีใด ๆ }

อย่างไรก็ตามการแสดงออกใน C# สามารถเป็นประเภทได้ทดแทน,ไบต์,สั้น,ushort,ภายใน,ไม่ได้,ยาว,ศีรษะ,ถ่าน,เชือก,แจกแจงประเภทและเวอร์ชันที่เป็นโมฆะของประเภทค่าเหล่านี้ ซึ่งเป็นช่วงที่กว้างกว่าเมื่อเทียบกับ Java ซึ่งให้ความยืดหยุ่นมากขึ้นเมื่อทำงานกับประเภทข้อมูลที่แตกต่างกัน

ล้ม - ผ่านพฤติกรรม

ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ Java มีพฤติกรรมที่ล้มเหลวหากคุณไม่ได้ใช้หยุดพักคำแถลง. ตัวอย่างเช่น:

จำนวน int = 1; สวิตช์ (หมายเลข) { กรณีที่ 1: System.out.println ("กรณีที่ 1"); กรณีที่ 2: System.out.println("กรณีที่ 2"); หยุดพัก; ค่าเริ่มต้น: System.out.println("กรณีเริ่มต้น"); }

ในรหัสนี้แม้ว่าในคือ 1 จะพิมพ์ทั้ง "กรณีที่ 1" และ "กรณีที่ 2" เพราะไม่มีหยุดพักหลังจากครั้งแรกกรณี.

ในทางกลับกัน C# ไม่อนุญาตให้มีการตกผ่านตามค่าเริ่มต้น หากคุณพยายามเขียนโค้ดโดยไม่มีหยุดพักหรือกข้ามไปคำสั่งที่ส่วนท้ายของกรณีบล็อก คุณจะได้รับข้อผิดพลาดในการคอมไพล์ นี่คือคุณลักษณะด้านความปลอดภัยที่ช่วยป้องกันข้อบกพร่องที่เกิดจากการพลัดตกโดยไม่ตั้งใจ แต่ถ้าคุณต้องการใช้งาน Fall-through ใน C# จริงๆ คุณสามารถใช้ theข้ามไปคำแถลง. ตัวอย่างเช่น:

จำนวน int = 1; สวิตช์ (หมายเลข) { กรณีที่ 1: Console.WriteLine ("กรณีที่ 1"); ข้ามไปกรณีที่ 2; กรณีที่ 2: Console.WriteLine ("กรณีที่ 2"); หยุดพัก; ค่าเริ่มต้น: Console.WriteLine ("กรณีเริ่มต้น"); }

การจับคู่รูปแบบ (C# 7.0 และใหม่กว่า)

ความแตกต่างที่สำคัญประการหนึ่งระหว่าง Java และ C# เมื่อพูดถึงคำสั่ง switch คือ C# ได้แนะนำการจับคู่รูปแบบในคำสั่ง switch โดยเริ่มจาก C# 7.0 การจับคู่รูปแบบช่วยให้คุณจับคู่ได้ไม่เพียงแต่กับค่าธรรมดาเท่านั้น แต่ยังรวมถึงเงื่อนไขที่ซับซ้อนมากขึ้นด้วย

ตัวอย่างเช่น คุณสามารถใช้รูปแบบประเภท:

วัตถุ obj = "สวัสดี"; switch(obj) { case string s: Console.WriteLine($"เป็นสตริง: {s}"); หยุดพัก; case int i: Console.WriteLine($"เป็นจำนวนเต็ม: {i}"); หยุดพัก; ค่าเริ่มต้น: Console.WriteLine("เป็นอย่างอื่น"); }

คุณยังสามารถใช้รูปแบบคงที่และรูปแบบเชิงสัมพันธ์ใน C# เวอร์ชันใหม่กว่าได้ Java ยังไม่มีรูปแบบขั้นสูงประเภทนี้ - ความสามารถในการจับคู่ในคำสั่งสวิตช์

การพิจารณาประสิทธิภาพ

ในแง่ของประสิทธิภาพ ทั้ง Java และ C# ปรับคำสั่งสวิตช์ให้เหมาะสมได้ค่อนข้างดี ในชวาเมื่อกรณีค่าเป็นจำนวนเต็มต่อเนื่องกัน คอมไพลเลอร์สามารถใช้ aสวิตช์ตารางการเรียนการสอนซึ่งให้การเข้าถึงเวลาที่เหมาะสมอย่างต่อเนื่องกรณีปิดกั้น. สำหรับค่าที่ไม่ต่อเนื่องกัน จะใช้ aค้นหาสวิตช์คำสั่งซึ่งมีความซับซ้อนของเวลาลอการิทึม

C# ยังมีการเพิ่มประสิทธิภาพที่คล้ายกัน คอมไพลเลอร์พยายามใช้ตารางข้ามสำหรับค่าที่ต่อเนื่องกันซึ่งเร็วมาก สำหรับค่าที่ไม่ต่อเนื่องกัน จะใช้อัลกอริธึมการค้นหาแบบไบนารี ซึ่งมีประสิทธิภาพที่ดีเช่นกัน

แอปพลิเคชันในโลกแห่งความเป็นจริงในธุรกิจสวิตช์

ตอนนี้คุณอาจสงสัยว่าการเขียนโปรแกรมทั้งหมดนี้เกี่ยวข้องกับการเป็นซัพพลายเออร์สวิตช์อย่างไร ลองคิดดูสิ ในระบบอัตโนมัติทางอุตสาหกรรม มักจะมีโปรแกรมควบคุมที่เขียนด้วยภาษา Java หรือ C# โปรแกรมเหล่านี้ใช้คำสั่งสวิตช์ในการตัดสินใจตามการอ่านเซ็นเซอร์หรืออินพุตของผู้ใช้

ตัวอย่างเช่น หากคุณใช้ aD4A - 3101N สวิตช์จำกัดวัตถุประสงค์ทั่วไปโปรแกรมควบคุมอาจใช้คำสั่ง switch เพื่อกำหนดว่าจะดำเนินการใดโดยขึ้นอยู่กับว่าสวิตช์เปิดหรือปิด ถ้าปิดสวิตช์อยู่ ก็สามารถสตาร์ทมอเตอร์ได้ หากเปิดอยู่อาจทำให้มอเตอร์หยุดได้

ในทำนองเดียวกัน6GK5008 - 0BA10 - 1AB2 สเกลสวิตช์ไฟฟ้า XB008อาจใช้ในโปรแกรมควบคุมที่เกี่ยวข้องกับเครือข่าย โปรแกรมสามารถใช้คำสั่ง switch เพื่อจัดการสถานะเครือข่ายต่างๆ ที่สวิตช์รายงาน เช่น การทำงานปกติ สถานะข้อผิดพลาด หรือโหมดการบำรุงรักษา

และD4A - 4501N D4A - 4510N ลิมิตสวิตช์อาจเป็นส่วนหนึ่งของระบบควบคุมแขนหุ่นยนต์ โปรแกรมควบคุมสามารถใช้คำสั่ง switch เพื่อตัดสินใจว่าแขนหุ่นยนต์ควรเคลื่อนที่อย่างไรตามตำแหน่งที่ลิมิตสวิตช์ตรวจพบ

บทสรุป

โดยสรุป แม้ว่าคำสั่ง switch ใน Java และ C# มีความคล้ายคลึงกันมากในแง่ของฟังก์ชันพื้นฐาน แต่ก็มีความแตกต่างที่สำคัญบางประการ C# มีประเภทข้อมูลที่หลากหลายสำหรับนิพจน์สวิตช์ ไม่อนุญาตให้ใช้ฟอลต์ทรูตามค่าเริ่มต้น และมีรูปแบบขั้นสูง - ความสามารถในการจับคู่ ในทางกลับกัน Java มีพฤติกรรมแบบ Fall-through ที่อนุญาตมากกว่า

ไม่ว่าคุณจะเป็นโปรแกรมเมอร์ที่เขียนโปรแกรมควบคุมสำหรับสวิตช์อุตสาหกรรมหรือผู้ซื้อที่กำลังมองหาสวิตช์ที่เหมาะสมสำหรับโครงการของคุณ การทำความเข้าใจความแตกต่างเหล่านี้สามารถช่วยให้คุณตัดสินใจได้ดีขึ้น หากคุณอยู่ในตลาดสวิตช์คุณภาพสูง ฉันอยากคุยกับคุณ เรามีสวิตช์ที่หลากหลายเพื่อตอบสนองความต้องการของคุณ และฉันพร้อมที่จะช่วยคุณค้นหาสวิตช์ที่ลงตัวกับการใช้งานของคุณ ดังนั้น อย่าลังเลที่จะติดต่อและเริ่มการสนทนาเรื่องการจัดซื้อจัดจ้าง

อ้างอิง

  • "Effective Java" โดย Joshua Bloch
  • "C# ในระดับความลึก" โดย Jon Skeet

ส่งคำถาม