webentwicklung-frage-antwort-db.com.de

Was sind die Hauptunterschiede zwischen C # und Java?

Ich möchte nur eines klarstellen. Dies ist keine Frage, bei welcher Frage es besser ist, diesen Teil überlasse ich einem anderen, um zu diskutieren. Das interessiert mich nicht. Diese Frage wurde mir in meinem Vorstellungsgespräch gestellt und ich dachte, es wäre nützlich, ein bisschen mehr zu lernen.

Dies sind die, die ich mir einfallen lassen könnte:

  • Java ist "plattformunabhängig". Nun, heutzutage könnte man sagen, dass es das Mono Projekt gibt, also könnte man auch C # in Betracht ziehen, aber ich glaube, es ist etwas übertrieben. Warum? Nun, wenn ein neues Release von Java) fertig ist, ist es gleichzeitig auf allen unterstützten Plattformen verfügbar, auf der anderen Seite, wie viele Funktionen von C # 3.0 fehlen noch in der Mono-Implementierung? Oder ist es wirklich CLR vs. JRE dass wir hier vergleichen sollten?
  • Java unterstützt keine Ereignisse und Delegaten. Soweit ich weiss.
  • In Java sind alle Methoden virtuell
  • Entwicklungstools: Ich glaube, es gibt noch kein solches Tool wie Visual Studio. Besonders wenn Sie mit Teameditionen gearbeitet haben, wissen Sie, was ich meine.

Bitte fügen Sie andere hinzu, die Sie für relevant halten.

Update: Nur aufgetaucht, Java hat keine benutzerdefinierten Attribute für Klassen, Methoden usw. Oder doch?

209
Enes

Vergleichen von Java 7 und C #

(Einige Funktionen von Java 7 werden hier nicht erwähnt, aber der Vorteil der using - Anweisung aller Versionen von C # gegenüber Java 1-6 wurde entfernt.)

Ihre Zusammenfassung ist nicht vollständig korrekt:

  • In Java Methoden sind virtuell standardmäßig aber Sie können sie endgültig machen. (In C # sind sie standardmäßig versiegelt, aber Sie können sie virtuell machen.)
  • Es gibt viele IDEs für Java, sowohl kostenlos (z. B. Eclipse, Netbeans) als auch kommerziell (z. B. IntelliJ IDEA).

Darüber hinaus (und was bereits in Ihrer Zusammenfassung enthalten ist):

  • Generika sind völlig unterschiedlich zwischen den beiden; Java Generics sind nur ein "Trick" zur Kompilierungszeit (aber ein nützlicher Trick). In C # und .NET werden Generics auch zur Ausführungszeit beibehalten und funktionieren sowohl für Werttypen als auch Referenztypen unter Einhaltung der entsprechenden Effizienz (z. B. ein List<byte> Als ein byte[] Sichern statt eines Arrays von Boxed Bytes.)
  • C # hat keine Ausnahmen überprüft
  • In Java können keine benutzerdefinierten Werttypen erstellt werden
  • Java hat keine Überladung von Operatoren und Konvertierungen
  • Java hat keine Iteratorblöcke für die einfache Implementierung von Iteratoren
  • Java hat nichts mit LINQ zu tun
  • Zum Teil, weil keine Delegierten vorhanden sind, hat Java nicht ganz so etwas wie anonyme Methoden und Lambda-Ausdrücke. Anonyme innere Klassen füllen diese Rollen normalerweise aus, aber klobig.
  • Java hat keine Ausdrucksbäume
  • C # hat keine anonymen inneren Klassen
  • C # hat überhaupt keine inneren Klassen von Java - alle verschachtelten Klassen in C # sind wie die statischen verschachtelten Klassen von Java
  • Java hat keine statischen Klassen (die keine any Instanzkonstruktoren haben und nicht für Variablen, Parameter usw. verwendet werden können)
  • Java hat keine Entsprechung zu den anonymen C # 3.0-Typen
  • Java hat keine implizit typisierten lokalen Variablen
  • Java hat keine Erweiterungsmethoden
  • Java verfügt nicht über Objekt- und Auflistungsinitialisierungsausdrücke
  • Die Zugriffsmodifikatoren sind etwas anders - in Java) gibt es (derzeit) kein direktes Äquivalent zu einer Assembly, also keine Vorstellung von "interner" Sichtbarkeit, in C # gibt es kein Äquivalent zur "Standard" -Sichtbarkeit in Java unter Berücksichtigung von Namespace (und Vererbung)
  • Die Reihenfolge der Initialisierung in Java und C # unterscheidet sich geringfügig (C # führt Variableninitialisierer vor dem verketteten Aufruf des Konstruktors des Basistyps aus)
  • Java hat keine Eigenschaften als Teil der Sprache. Sie sind eine Konvention von get/set/is-Methoden
  • Java hat nicht das Äquivalent von "unsicherem" Code
  • Interop ist in C # (und .NET im Allgemeinen) einfacher als in Java JNI
  • Java und C # haben etwas unterschiedliche Vorstellungen von Aufzählungen. Javas sind viel objektorientierter.
  • Java hat keine Präprozessor-Direktiven (#define, #if etc in C #).
  • Java hat keine Entsprechung zu C # 's ref und out für die Übergabe von Parametern als Referenz
  • Java hat keine Entsprechung von Teiltypen
  • C # -Schnittstellen können keine Felder deklarieren
  • Java hat keine vorzeichenlosen Integer-Typen
  • Java hat keine Sprache Unterstützung für einen Dezimaltyp. (Java.math.BigDecimal bietet etwas like System.Decimal - mit Unterschieden - aber es gibt keine Sprachunterstützung)
  • Java hat kein Äquivalent zu nullbaren Werttypen
  • Beim Boxen in Java) werden vordefinierte (aber "normale") Referenztypen mit bestimmten Operationen verwendet. Das Boxen in C # und .NET ist eine transparentere Angelegenheit, bei der ein Referenztyp für das Boxen von erstellt wird CLR für einen beliebigen Wertetyp.

Dies ist nicht erschöpfend, deckt aber alles ab, was ich mir vorstellen kann.

329
Jon Skeet

Das Folgende ist eine ausführliche Referenz von Dare Obasanjo zu den Unterschieden zwischen C # und Java. Ich beziehe mich immer auf diesen Artikel, wenn ich zwischen den beiden wechsle.

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

24
Winston Smith

C # hat automatische Eigenschaften, die unglaublich praktisch sind und auch dazu beitragen, Ihren Code sauberer zu halten, zumindest wenn Sie keine benutzerdefinierte Logik in Ihren Gettern und Setzern haben.

11

Funktionen von C # In Java • C # enthält primitivere Typen und Funktionen zum Abfangen von arithmetischen Ausnahmen.

• Enthält eine große Anzahl von Bequemlichkeiten für Notationen über Java, von denen viele der großen Community von C++ - Programmierern bereits bekannt sind, z. B. das Überladen von Operatoren und benutzerdefinierte Besetzungen.

• Die Ereignisbehandlung ist ein "erstklassiger Bürger" - sie ist Teil der Sprache selbst.

• Ermöglicht die Definition von "Strukturen", die Klassen ähneln, jedoch auf dem Stapel zugeordnet werden können (im Gegensatz zu Instanzen von Klassen in C # und Java).

• C # implementiert Eigenschaften als Teil der Sprachsyntax.

• Mit C # können switch-Anweisungen auf Zeichenfolgen angewendet werden.

• C # ermöglicht anonyme Methoden, die Schließfunktionen bereitstellen.

• C # ermöglicht einen Iterator, der Co-Routinen über ein Ertragsschlüsselwort im funktionalen Stil verwendet.

• C # unterstützt Ausgabeparameter, die die Rückgabe mehrerer Werte unterstützen. Diese Funktion wird von C++ und SQL gemeinsam genutzt.

• C # kann Namespaces aliasisieren.

• C # hat "Explicit Member Implementation" (Explizite Member-Implementierung), mit der eine Klasse Methoden einer Schnittstelle spezifisch implementieren kann, getrennt von ihren eigenen Klassenmethoden. Dies ermöglicht es auch, zwei verschiedene Schnittstellen zu implementieren, die zufällig eine Methode mit dem gleichen Namen haben. Die Methoden einer Schnittstelle müssen nicht öffentlich sein. Sie können nur über diese Schnittstelle zugänglich gemacht werden.

• C # ermöglicht die Integration in COM.

• Nach dem Beispiel von C und C++ ermöglicht C # das Aufrufen von Verweisen für Primitiv- und Verweistypen.

Funktionen von Java In C # nicht vorhanden

• Das Schlüsselwort strictfp von Java garantiert, dass das Ergebnis von Gleitkommaoperationen auf allen Plattformen gleich bleibt.

• Java unterstützt geprüfte Ausnahmen zur besseren Durchsetzung von Fehlerbehebung und -behandlung.

10
Abhishek kumar

Eine weitere gute Ressource ist http://www.javacamp.org/javavscsharp/ Diese Site listet viele Beispiele auf, die fast alle Unterschiede zwischen diesen beiden Programmiersprachen veranschaulichen.

Über die Attribute verfügt Java) über Annotationen, die fast genauso funktionieren.

9
Rafael Romão

Generika:

Mit Java generics erhalten Sie nicht die Ausführungseffizienz, die Sie mit .NET erzielen, da der Compiler beim Kompilieren einer generischen Klasse in Java den Typparameter entfernt und Object ersetzt Zum Beispiel, wenn Sie eine Foo<T> - Klasse haben, generiert der Java) - Compiler Byte-Code, als ob es Foo<Object> wäre müssen im "Hintergrund" gemacht werden.

Ich spiele jetzt schon eine Weile mit Java/C # und meiner Meinung nach sind die Delegierten der Hauptunterschied auf der Sprachebene.

5
bruno conde

Bitte gehen Sie über den unten angegebenen Link zu msdn.Microsoft.com/en-us/library/ms836794.aspx. Er behandelt sowohl die Ähnlichkeit als auch den Unterschied zwischen C # und Java

0
Kanwar Singh