Wątek zablokowany 2019-10-15 12:34 przez Ktos.

Czym się różni Java od C#?

1

Witam. Ostatnio zacząłem naukę Javy i pobieżnie przejrzałem składnię C#. Podobieństwo jest bardzo duże, stąd moje pytanie: czym tak na prawdę różnią się te dwa języki. Na pewno nie chodzi tylko o drobne różnice w składni. Od razu zastrzegam, że nie chę wywołać żadnego flame'a - chodzi mi jedynie o rzetelne informację na tema różnic pomiędzy tymi dwoma językami, a nie o opinie.
Pozdrawiam.

1

Fragment z opracowania "C# Programowanie pod Windows"

C# a Java

Na temat podobienstw i róznic miiedzy C# a Java toczy sie wiele dyskusji. Z pewnoscia C#
nie zajmie miejsca Javy, bowiem zakresy stosowalnosci C# i Javy nieco sie rozmijaja: Java
byla, jest i bedzie nadal najlepszym wyborem jesli chodzi o aplikacje przenosne. Z drugiej strony,
C# pozwala na rozwijzanie tych samych problemów co Java, tyle ze przy uzyciu znacznie
wydajniejszego srodowiska i przy uzyciu prostszych technik.

Kilka wazniejszych róznic miedzy C# a Java:

Typy proste w Javie tworza osobny swiat. Aby traktowac typy proste i typy referencyjne w
sposób jednorodny nalezy umieszczac obiekty typów prostych w obiektach referencyjnych,
za pomoca tzw. klas wrapperów. Typy proste w C# sa z punktu widzenia modelu obiektowego
takie same jak typy referencyjne. Obiekt typu prostego jest obiektem - ma pola,
metody i inne wlasciwosci. W C# wyrazenia 5.ToString() czy (5-x).ToString() sa jak
najbardziej poprawne. W C# programista moze defniowac wlasne typy proste, zastepujac
slowo class slowem struct.

</li>

W C# istnieje mozliwosc przekazania parametrów przez referencje za pomoca ref i out. W
Javie parametry sa zawsze przekazywane przez wartosc.

</li>

Iterfejsy w Javie moga zawierac skladowe, w C# nie. Jednak w C# istnieje mozliwosc
implementowania interfejsów, których funkcje skladowe maja te same nazwy.

</li>

Java nie wykrywa przepelnien podczas obliczen matematycznych. W C# mozna wymusic
wykrywanie przepelnien za pomoc¡ bloku osygnowanego jako checked.

</li>

W C# wolno pisac kod korzystajacy ze wskazników.

</li>

Mechanizm delegatów, dostepny w C#, jest bardzo elegancki i pozwala nie tylko zapanowac
nad wskaznikami do funkcji, ale takze rozwi¡zuje problem zdarzen prosciej niz w Javie.

</li> </ul>

Jak pisze w Thinking in C# Bruce Eckel, jeden z dlugoletnich propagatorów Javy:

Java has succeeded in two key areas: as the dominant language for writing server-side
applications and as the top language for teaching computer science in colleges. The
.NET Framework is better for both these areas, although it is not inevitable that it will become dominant in either. For writing client applications, there is no question that C# clearly outstrips Java.

1

Do tego Java jest od niedawna otwarta i JVM est dostępna na kilka platform. A .NET Framework jest zamknięte, ale posiada otwarte implementacje. Poza tym całe założenia .NET (opis typów i niektórych innych elementów języków) są otwartymi standardami ECMA.

A tak to w programie "Hello world" różnią się praktycznie jedną linijką: System.Out.println() vs Console.WriteLine() :-)

1

Deti: skąd wziąłeś to opracowanie? Bo w naszym dziale C# też by się przydały takie artykuły "C# a Java" i "C# a C++".

W ogóle trzeba dostosować dział C# do innych, zlikwidować ten nieszczęsny "Podręcznik".

A wracając do tematu to Deti chyba go wyczerpał.. co można dodać...

  • stałe "static final" z Javy zostały zastąpione przez const i readonly
  • w C# każda metoda jest standardowo niewirtualna, wirtualność osiąga się przez użycie modyfikatora virtual
  • w C# istnieją konstruktory statyczne
  • oprócz modyfikatorów dostępu public, protected, private istnieje jeszcze "internal"
  • w C# można przekazać zmienną liczbę parametrów dzięki słowu kluczowemu "params"

ogólnie dużo szczegółów

1

C# jest lepszy tylko pod względem samego języka czy może ma większe wsparcie w postaci bibliotek?

1

Deti: skąd wziąłeś to opracowanie? Bo w naszym dziale C# też by się przydały takie artykuły "C# a Java" i "C# a C++".

Troche off-topic :
http://rapidshare.com/files/27284847/C__i_programowanie_pod_Windows.pdf.html

PDF 1,83 MB (278 stron)

1
Kooba napisał(a)
  • w C# można przekazać zmienną liczbę parametrów dzięki słowu kluczowemu "params"

W Javie 5 też już to jest:
http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

1
rotgut napisał(a)
Kooba napisał(a)
  • w C# można przekazać zmienną liczbę parametrów dzięki słowu kluczowemu "params"

W Javie 5 też już to jest:
http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

No to można zacząć mówić że Java jest podobna do C#, a nie odwrotnie :D

1
  • C# oferuje przeładowywanie operatorów.
  • Od kiedy mono ładnie się rozwinęło Java wcale nie jest już taka super jeśli idzie o przenośność, istnieje nawet .NET na symbiana
1

ja mam takie wrażenie odnośnie .NET, że MS po prostu poskładał wszystkie popularne języki i IDE do kupy, powybierał z każdego te lepsze części i sklecił to w całość.

BTW czy ktoś z Was próbował pisać coś pod .NET CE 1.0?? Pierwsze wersje bez SP miały takie kwiatki, że np. nie zawsze generowało się zdarzenie OnClick buttona :D, zresztą na wersji 1.1 są często fajne jaja :p

1

Czy ktoś wie, który język ma większe wsparcie w postaci bibliotek?

0

bibliotek do czego?

0
  • do GUI
  • do programowanie sieciowego
  • wsparcie na komórki
  • różnego rodzaju algorytmów
  • do czego tam można jeszcze wymyślić...
0

do GUI masz komponenty, nie wiem co możesz chcieć innego
do sieci masz sockety, remoting i coś tam jeszcze
nie wiem co rozumiesz przez wsparcie na komórki - jest .NET CE
i pewnie jak poszukasz to do większości znajdziesz

0

Jeśli chodzi o server-side, to dostęp do bibliotek w Javie jest o niebo lepszy niż w C#.
Java jest po prostu dłużej. Z tego wynika również to, że platforma wykonawcza jest lepiej dopracowana i stabilniejsza. Nie wiem, może .NET 2.0 jest lepszy, ale 1.1 się sypał co moment. Większość krytycznych aplikacji serwerowych (np. w bankach, szpitalach, dużych instytucjach, lotniskach itp.) chodzi na Javie, ewentualnie starsze na C++, ale to już rzadkość. Na C# jeszcze nie widziałem. W .NET na dojrzałe rozwiązania tej klasy co EJB3, Hibernate, Spring Framework trzeba chyba jeszcze trochę poczekać.

Natomiast jeśli chodzi o aplikacje klienckie na Windows, to .NET faktycznie wymiata. Jednak walka na tym polu jest bardzo zacięta, szczególnie, że od Java 6 Swing chodzi tak płynnie jak natywne aplikacje Windows. A w Javie 7 Swing ma zyskać kolejnych kilka udogodnień poprawiających szybkość i łatwość kodowania GUI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1