Jaka jest różnica pomiędzy instrukcją switch w Javie i C#?

Jan 22, 2026

Zostaw wiadomość

Hej tam! Jako dostawca przełączników miałem do czynienia z wszelkiego rodzaju przełącznikami w świecie przemysłowym. Ale dzisiaj zmienię trochę biegi i omówię coś innego — różnicę między instrukcją switch w Javie i C#. Może się to wydawać nieco nietypowe, ale zaufaj mi, zrozumienie tych koncepcji programowania może w rzeczywistości dać ci lepszą perspektywę na działanie różnych systemów, a to jest bardzo przydatne w branży przełączników.

Zacznijmy od podstaw. Instrukcja switch zarówno w języku Java, jak i C# to instrukcja przepływu sterowania, która umożliwia wybranie jednego z wielu bloków kodu do wykonania w oparciu o wartość wyrażenia. To jest jak wielokierunkowe rozwidlenie dróg; w zależności od tego, z jaką wartością masz do czynienia, wybierasz inną ścieżkę.

Składnia i struktura

W Javie podstawowa składnia instrukcji switch wygląda następująco:

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

switch(expression) { case value1: // kod, który ma zostać wykonany, jeśli wyrażenie == wartość1 przerwa; case wartość2: // kod, który ma zostać wykonany, jeśli wyrażenie == przerwa na wartość2; default: // kod, który ma zostać wykonany, jeśli wyrażenie nie pasuje do żadnego przypadku }

Thewyrażeniemoże być typubajt,krótki,zwęglać,wew,wyliczenietypy,Smyczkowy(od Java 7) i niektóre klasy opakowań, takie jakBajt,Krótki,Charakter, ILiczba całkowita. Każdysprawanastępuje określona wartość iprzerwainstrukcja służy do wyjścia z bloku przełączników po znalezieniu dopasowania. Jeśli zapomniszprzerwa, wykonanie „przejdzie” do następnego przypadku, co może prowadzić do nieoczekiwanego zachowania.

W języku C# składnia jest dość podobna:

switch(expression) { case value1: // kod, który ma zostać wykonany, jeśli wyrażenie == wartość1 przerwa; case wartość2: // kod, który ma zostać wykonany, jeśli wyrażenie == przerwa na wartość2; default: // kod, który ma zostać wykonany, jeśli wyrażenie nie pasuje do żadnego przypadku }

Jednakże,wyrażeniew C# może być typuwymiana,bajt,krótki,skrócić,wew,uint,długi,głowa,zwęglać,smyczkowy,wyliczenietypy i wersje tych typów wartości dopuszczające wartość null. To szerszy zakres w porównaniu z Javą, który zapewnia większą elastyczność podczas pracy z różnymi typami danych.

Upadek – poprzez zachowanie

Jak wspomniałem wcześniej, Java zachowuje się nieprawidłowo, jeśli nie używasz metodyprzerwaoświadczenie. Na przykład:

int liczba = 1; switch(num) { case 1: System.out.println("Przypadek 1"); przypadek 2: System.out.println("Przypadek 2"); przerwa; domyślnie: System.out.println("Domyślna wielkość liter"); }

Chociaż w tym kodziewwynosi 1, wydrukowane zostaną zarówno „Przypadek 1”, jak i „Przypadek 2”, ponieważ nie ma takiego przypadkuprzerwapo pierwszymsprawa.

Z drugiej strony, C# domyślnie nie pozwala na przechodzenie. Jeśli spróbujesz napisać kod bezprzerwalubmuszęoświadczenie na końcu asprawablock, pojawi się błąd kompilacji. Jest to funkcja bezpieczeństwa, która pomaga zapobiegać błędom spowodowanym przypadkowym upadkiem. Ale jeśli naprawdę chcesz zaimplementować przejście w C#, możesz użyć metodymuszęoświadczenie. Na przykład:

int liczba = 1; switch(num) { case 1: Console.WriteLine("Przypadek 1"); przejdź do przypadku 2; przypadek 2: Console.WriteLine("Przypadek 2"); przerwa; domyślnie: Console.WriteLine("Domyślna wielkość liter"); }

Dopasowywanie wzorców (C# 7.0 i nowsze)

Jedną z dużych różnic między Javą a C#, jeśli chodzi o instrukcje switch, jest to, że C# wprowadził dopasowywanie wzorców w swoich instrukcjach switch, począwszy od C# 7.0. Dopasowywanie wzorców umożliwia dopasowywanie nie tylko prostych wartości, ale także bardziej złożonych warunków.

Na przykład możesz użyć wzorców typów:

obiekt obj = "Witam"; switch(obj) { case string s: Console.WriteLine($"To jest ciąg: {s}"); przerwa; case int i: Console.WriteLine($"To liczba całkowita: {i}"); przerwa; domyślnie: Console.WriteLine("To coś innego"); }

W późniejszych wersjach języka C# można również używać wzorców stałych i wzorców relacyjnych. Java nie ma jeszcze tego rodzaju zaawansowanych możliwości dopasowywania wzorców w instrukcjach switch.

Rozważania dotyczące wydajności

Pod względem wydajności zarówno Java, jak i C# całkiem dobrze optymalizują instrukcje switch. W Javie, gdysprawawartości są kolejnymi liczbami całkowitymi, kompilator może użyć aprzełącznik stołowyinstrukcji, która zapewnia stały – czasowy dostęp do odpowiednichsprawablok. W przypadku wartości niekolejnych używa aprzełącznik wyszukiwaniainstrukcja, która ma logarytmiczną złożoność czasową.

C# ma również podobne optymalizacje. Kompilator próbuje użyć tabeli skoków dla kolejnych wartości, co jest bardzo szybkie. W przypadku wartości nie następujących po sobie wykorzystuje algorytm wyszukiwania binarnego, który również ma dobrą wydajność.

Rzeczywiste zastosowania w branży przełączników

Być może zastanawiasz się, jak to wszystko związane z programowaniem wiąże się z byciem dostawcą przełączników. Pomyśl o tym. W systemach automatyki przemysłowej często spotyka się programy sterujące pisane w języku Java lub C#. Programy te używają instrukcji switch do podejmowania decyzji na podstawie odczytów czujników lub danych wejściowych użytkownika.

Na przykład, jeśli używasz plikuD4A - 3101N Wyłącznik krańcowy ogólnego przeznaczenia, program sterujący może użyć instrukcji switch, aby określić, jakie działanie należy podjąć w zależności od tego, czy przełącznik jest otwarty, czy zamknięty. Jeśli przełącznik jest zamknięty, może uruchomić silnik; jeśli jest otwarta, może zatrzymać silnik.

Podobnie,6GK5008 - 0BA10 - 1AB2 Przełącznik elektryczny Scalance XB008może być używany w programie sterującym związanym z siecią. Program może używać instrukcji switch do obsługi różnych stanów sieci zgłaszanych przez przełącznik, takich jak normalna praca, stan błędu lub tryb konserwacji.

ID4A - 4501N D4A - 4510N Wyłącznik krańcowymoże być częścią systemu sterowania ramieniem robota. Program sterujący może użyć instrukcji switch, aby zdecydować, w jaki sposób ramię robota powinno się poruszać w oparciu o położenie wykryte przez wyłącznik krańcowy.

Wniosek

Podsumowując, chociaż instrukcje switch w Javie i C# mają wiele podobieństw pod względem podstawowej funkcjonalności, istnieją pewne kluczowe różnice. C# ma szerszy zakres typów danych dla wyrażenia przełącznika, domyślnie nie pozwala na przechodzenie przez nie i ma zaawansowane możliwości dopasowywania wzorców. Z drugiej strony Java charakteryzuje się bardziej liberalnym zachowaniem.

Niezależnie od tego, czy jesteś programistą piszącym programy sterujące do przełączników przemysłowych, czy też kupującym szukającym odpowiednich przełączników do swojego projektu, zrozumienie tych różnic może pomóc w podejmowaniu lepszych decyzji. Jeśli szukasz na rynku wysokiej jakości przełączników, chętnie z Tobą porozmawiam. Mamy szeroką gamę przełączników spełniających Twoje potrzeby, a ja jestem tutaj, aby pomóc Ci znaleźć idealne dopasowanie do Twojej aplikacji. Nie wahaj się więc skontaktować i rozpocząć dyskusję dotyczącą zamówień.

Referencje

  • „Efektywna Java” Joshuy Blocha
  • „C# w głębi” autorstwa Jona Skeeta

Wyślij zapytanie