Jakie są główne różnice między C# A Javą?
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?
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>
jakobyte[]
, 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
iout
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.
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.
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.
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.
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.
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".
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
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