Chcę tylko wyjaśnić jedną rzecz. To nie jest pytanie, które jest lepsze, tę część pozostawiam komuś innemu do omówienia. Nie obchodzi mnie to. Zadano mi to pytanie podczas rozmowy kwalifikacyjnej i pomyślałem, że przydałoby się trochę więcej.
Oto te, które mógłbym wymyślić:
- Java jest „niezależna od platformy”. W dzisiejszych czasach można powiedzieć, że istnieje projekt Mono , więc C # można również rozważyć, ale uważam, że jest to nieco przesadzone. Czemu? Cóż, kiedy powstaje nowa wersja Java, jest ona jednocześnie dostępna na wszystkich obsługiwanych platformach, z drugiej strony, ile funkcji C # 3.0 wciąż brakuje w implementacji Mono? Czy to naprawdę CLR vs. JRE , które powinniśmy porównać tutaj?
- Java nie obsługuje wydarzeń i delegatów. Z tego co wiem.
- W Javie wszystkie metody są wirtualne
- Narzędzia programistyczne: Wierzę, ż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 Twoim zdaniem są istotne.
Aktualizacja: Właśnie wyskoczyło mi z głowy, Java nie ma czegoś takiego jak niestandardowe atrybuty klas, metod itp. A może to?
Odpowiedzi:
Porównanie Java 7 i C # 3
(Niektóre funkcje Java 7 nie są tutaj wymienione, ale
using
usunięto przewagę instrukcji wszystkich wersji C # w stosunku do Java 1-6).Nie wszystkie podsumowania są poprawne:
Poza tym (i co jest już w podsumowaniu):
List<byte>
Jakobyte[]
wsparcie, a nie tablicę bajtów w pudełku).ref
iout
do przekazywania parametrów przez odniesienieNie jest to wyczerpujące, ale obejmuje wszystko, co mogę wymyślić z ręki.
źródło
Poniżej znajduje się obszerne odniesienie Dare Obasanjo na temat różnic między C # a Javą. Zawsze przełączam się między nimi, odnosząc się do tego artykułu.
http://www.25hoursaday.com/CsharpVsJava.html
źródło
TimeDate
klasę, aby zawsze mieć czas, i nie miał jeszcze czasu :(C # ma właściwości automatyczne, które są niezwykle wygodne, a także pomagają utrzymać kod w czystości, przynajmniej gdy nie masz niestandardowej logiki w programach pobierających i ustawiających.
źródło
Funkcje języka C # nieobecne w Javie • Język C # obejmuje bardziej prymitywne typy i funkcję przechwytywania wyjątków arytmetycznych.
• Zawiera dużą liczbę notacyjnych udogodnień w Javie, z których wiele, takich jak przeciążanie operatorów i rzutowania zdefiniowane przez użytkownika, jest już znanych dużej społeczności programistów C ++.
• Obsługa zdarzeń jest „obywatelem pierwszej klasy” - jest częścią samego języka.
• Umożliwia definicję „struktur”, które są podobne do klas, ale mogą być przydzielane na stosie (w przeciwieństwie do instancji klas w języku C # i Javie).
• C # implementuje właściwości jako część składni języka.
• C # pozwala na działanie instrukcji switch na łańcuchach.
• C # pozwala na anonimowe metody zapewniające funkcjonalność zamknięcia.
• C # pozwala iteratorowi, który wykorzystuje procedury wspólne za pomocą słowa kluczowego wydajności w stylu funkcjonalnym.
• C # obsługuje parametry wyjściowe, pomagając w zwróceniu wielu wartości, funkcję wspólną dla C ++ i SQL.
• C # ma możliwość aliasu przestrzeni nazw.
• C # ma „Explicit Member Implementation”, który pozwala klasie na konkretną implementację metod interfejsu, niezależnie od metod własnych. Pozwala to również na implementację dwóch różnych interfejsów, które mają metodę o tej samej nazwie. Metody interfejsu nie muszą być publiczne; można je uczynić dostępnymi tylko za pośrednictwem tego interfejsu.
• C # zapewnia integrację z COM.
• Zgodnie z przykładem C i C ++, C # pozwala na wywołanie przez referencję dla typów pierwotnych i referencyjnych.
Funkcje Java Absent w C #
• Słowo kluczowe strictfp Java gwarantuje, że wynik operacji zmiennoprzecinkowych pozostanie taki sam na różnych platformach.
• Java obsługuje sprawdzone wyjątki w celu lepszego egzekwowania pułapek i obsługi błędów.
źródło
Innym dobrym zasobem jest http://www.javacamp.org/javavscsharp/ Ta strona zawiera wiele przykładów ilustrujących prawie wszystkie różnice między tymi dwoma językami programowania.
O atrybutach Java ma Adnotacje, które działają prawie tak samo.
źródło
Generyczne:
W przypadku generycznych programów Java nie uzyskuje się żadnej wydajności wykonywania .NET, ponieważ podczas kompilacji ogólnej klasy w Javie kompilator odbiera parametr type i wszędzie zastępuje Object. Na przykład, jeśli masz
Foo<T>
klasę, kompilator Java generuje kod bajtowy tak, jakby byłFoo<Object>
. Oznacza to, że rzutowanie, a także boksowanie / rozpakowywanie będzie musiało zostać wykonane w „tle”.Od jakiegoś czasu gram w Javie / C # i, moim zdaniem, główną różnicą na poziomie językowym są, jak wskazałeś, delegaci.
źródło
Proszę przejść przez link podany poniżej msdn.microsoft.com/en-us/library/ms836794.aspx Obejmuje zarówno podobieństwo, jak i różnicę między C # a java
źródło