Jakie są główne różnice między C# A Javą?

zamknięty. To pytanie i jego odpowiedzi są zamknięte , ponieważ pytanie jest off-topic, ale ma znaczenie historyczne. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji. Chcę tylko wyjaśnić jedną rzecz. To nie jest pytanie, które z nich jest lepsze, tę część pozostawiam komuś innemu do omówienia. Nie obchodzi mnie to. Zadano mi to pytanie na rozmowie kwalifikacyjnej i pomyślałem, że przydałoby się dowiedzieć się trochę więcej.

To są te, które mógłbym wymyślić:

  • Java jest "niezależna od platformy". NO w dzisiejszych czasach można powiedzieć, że jest projekt mono więc C# też można rozważyć ale Uważam, że to trochę przesadzające. Dlaczego? Kiedy nowa wersja Javy jest done it jest jednocześnie dostępny na wszystkich platformach, które obsługuje, z drugiej strony ile funkcji C# 3.0 brakuje jeszcze w implementacji Mono? Czy to naprawdę CLR vs. JRE powinniśmy tutaj porównać?
  • Java nie obsługuje zdarzeń i delegatów. Z tego co wiem.
  • w Javie wszystkie metody są wirtualne
  • [9]}narzędzia programistyczne: uważam, że nie ma jeszcze takiego narzędzia jak Visual Studio. Zwłaszcza jeśli pracowałeś z edycjami zespołowymi, będziesz wiedział co mam na myśli.

Dodaj inne, które uważasz za istotne.

Update: Właśnie mi się przypomniało, że Java nie ma czegoś w rodzaju własnych atrybutów na klasach, metodach itp. A może tak?

Author: Peter Mortensen, 2008-11-17

7 answers

Porównanie Javy 7 i C# 3

(niektóre funkcje Javy 7 nie są tutaj wymienione, ale using oświadczenie przewaga wszystkich wersji C# nad Javą 1-6 została usunięta.)

Nie wszystkie Twoje podsumowanie jest poprawne:

  • w Javie metody są wirtualne domyślnie , ale można je uczynić ostatecznymi. (W C# są domyślnie zapieczętowane, ale można je uczynić wirtualnymi.)
  • istnieje wiele Idów dla Javy, zarówno darmowych (np. Eclipse, Netbeans), jak i komercyjne (np. IntelliJ IDEA)

Poza tym (i co jest już w Twoim podsumowaniu):

  • Generyki są zupełnie różne między tymi dwoma; generyki Javy są tylko "trickiem" w czasie kompilacji(ale przydatnym). W C# i.NET generics są również utrzymywane w czasie wykonywania i działają zarówno dla typów wartości, jak i typów referencyjnych, zachowując odpowiednią wydajność (np. A List<byte> jako byte[], zamiast tablicy bajtów pudełkowych.)
  • C# nie ma zaznaczone wyjątki
  • Java nie pozwala na tworzenie typów wartości zdefiniowanych przez użytkownika
  • Java nie ma operatora i przeciążenia konwersji
  • Java nie posiada bloków iteratora do prostej implementacji iteratorów
  • Java nie ma nic takiego jak LINQ
  • częściowo z powodu braku delegatów, Java nie ma nic podobnego do anonimowych metod i wyrażeń lambda. Anonimowe klasy wewnętrzne zwykle wypełniają te role, ale niezręcznie.
  • Java nie ma drzew wyrażeń
  • C # nie ma anonimowych klas wewnętrznych
  • C# nie posiada wewnętrznych klas Javy , w rzeczywistości wszystkie zagnieżdżone klasy w C# są jak statyczne zagnieżdżone klasy Javy.]} W Javie nie ma klas statycznych (które nie mają żadnych konstruktorów instancji i nie mogą być używane dla zmiennych, parametrów itp.)]}
  • Java nie ma odpowiednika do typów anonimowych C# 3.0
  • Java nie ma domyślnie wpisanego lokalnego zmienne
  • Java nie ma metod rozszerzeń
  • Java nie posiada wyrażeń inicjalizatora obiektów i kolekcji
  • Modyfikatory dostępu są nieco inne - w Javie nie ma (obecnie) bezpośredniego odpowiednika asemblera, więc nie ma pojęcia o" wewnętrznej " widoczności; w C# nie ma odpowiednika "domyślnej" widoczności w Javie, która uwzględnia przestrzeń nazw (i dziedziczenie)
  • kolejność inicjalizacji w Javie i C# jest subtelnie Inna (C# wykonuje inicjalizatory zmiennych przed wywołaniem łańcuchowym do konstruktora typu bazowego)
  • Java nie posiada właściwości jako część języka, są konwencją metod get / set / is
  • Java nie ma odpowiednika kodu "unsafe"
  • Interop jest łatwiejszy w C# (i. Net w ogóle) niż JNI w Javie [17]}
  • Java i C# mają nieco inne wyobrażenia o enumach. Java jest znacznie bardziej zorientowana obiektowo.
  • Java nie posiada dyrektyw preprocesora (#define, # if etc in C#).
  • Java nie ma odpowiednika C# ' S ref i out dla przekazywania parametrów przez referencję
  • Java nie ma odpowiednika typów częściowych
  • interfejsy C# nie mogą deklarować pól
  • Java nie ma niepodpisanych typów całkowitych
  • Java nie obsługuje języka dla typu dziesiętnego. (Jawa.matematyka.BigDecimal dostarcza coś Jak System.Decimal-z różnicami-ale nie ma obsługi języka)
  • Java nie ma odpowiednika nullable typy wartości
  • boks w Javie używa predefiniowanych (ale "normalnych") typów odwołań z konkretnymi operacjami na nich. Boks w C# i. NET jest bardziej przejrzysty, z typem odniesienia tworzonym dla boksu przez CLR dla dowolnego typu wartości.
To nie jest wyczerpujące, ale obejmuje wszystko, co mogę wymyślić.
 329
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 21:10:52

Poniżej znajduje się obszerne odniesienie Dare Obasanjo do różnic między C# A Javą. Zawsze odnosiłem się do tego artykułu, przełączając się między nimi.

Http://www.25hoursaday.com/CsharpVsJava.html

 24
Author: Winston Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-17 10:55:11

C # ma właściwości automatyczne, które są niezwykle wygodne, a także pomagają zachować czystość kodu, przynajmniej jeśli nie masz niestandardowej logiki w getterach i seterach.

 11
Author: Morten Christiansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-17 13:56:23

Cechy C# nieobecne w Javie * C# zawiera bardziej prymitywne typy i funkcje do przechwytywania WYJĄTKÓW arytmetycznych.

* zawiera dużą liczbę udogodnień notacyjnych w Javie, z których wiele, takich jak przeciążanie operatorów i definiowane przez użytkownika odlewy, jest już znanych dużej społeczności programistów C++.

* Obsługa zdarzeń jest "obywatelem pierwszej klasy" -jest częścią samego języka.

* pozwala na zdefiniowanie "struktur", które są podobne do klas, ale mogą być przydzielane na stosie (w przeciwieństwie do instancji klas w C# i Javie).

* C# implementuje właściwości jako część składni języka.

• C# pozwala poleceniom switch operować na łańcuchach znaków.

* C # pozwala na anonimowe metody zapewniające funkcjonalność zamykania.

• C# pozwala iteratorowi, który używa Ko-procedur za pomocą słowa kluczowego yield w stylu funkcjonalnym.

* C # ma wsparcie dla parametrów wyjściowych, pomagając w zwracaniu wielu wartości, a funkcja współdzielona przez C++ i SQL.

* C # ma możliwość alias przestrzeni nazw.

* C # ma "Explicit Member Implementation", która pozwala klasie na specyficzne implementowanie metod interfejsu, oddzielone od własnych metod klasy. Pozwala to również na zaimplementowanie dwóch różnych interfejsów, które mają metodę o tej samej nazwie. Metody interfejsu nie muszą być publiczne; mogą być dostępne tylko za pośrednictwem tego interfejsu.

* C # zapewnia integracja z COM.

* idąc za przykładem C i C++, C# umożliwia wywołanie przez odniesienie dla typów prymitywnych i referencyjnych.

Cechy Javy nieobecne w C#

• słowo kluczowe strictfp Javy gwarantuje, że wynik operacji zmiennoprzecinkowych pozostanie taki sam na różnych platformach.

* Java obsługuje zaznaczone wyjątki dla lepszego egzekwowania zalewkowania i obsługi błędów.

 10
Author: Abhishek kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 16:01:13

Kolejnym dobrym zasobem jest http://www.javacamp.org/javavscsharp/ Ta strona wymienia wiele przykładów, które ilustrują prawie wszystkie różnice między tymi dwoma językami programowania.

Jeśli chodzi o atrybuty, Java posiada adnotacje, które działają prawie tak samo.

 9
Author: Rafael Romão,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 13:40:52

Generyki:

W przypadku Java generics, tak naprawdę nie uzyskujesz żadnej wydajności wykonania, jaką uzyskasz w przypadku. NET, ponieważ gdy kompilujesz klasę generyczną w Javie, kompilator usuwa parametr type I Wszędzie zastępuje obiekt. Na przykład, jeśli masz klasę Foo<T>, kompilator Javy generuje kod bajtowy tak, jakby był to Foo<Object>. Oznacza to, że casting, a także Boks / unboxing będą musiały być wykonane w "tle".

[[2]] od jakiegoś czasu gram w Java/C# i, moim zdaniem, główną różnicą na poziomie językowym są, jak pan wskazał, delegaci.
 5
Author: bruno conde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-17 10:51:23

Proszę przejść przez link podany poniżej msdn.microsoft.com/en-us/library/ms836794.aspx Obejmuje zarówno podobieństwo i różnicę między C# i java

 0
Author: Kanwar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 08:40:35