Ich habe Java in der Schule gelernt, und dann wurde ich von einem C # -Shop eingestellt und habe das seitdem benutzt. In der ersten Woche erkannte ich, dass die beiden Sprachen fast identisch waren, und die nächsten zwei Monate, um die kleinen Unterschiede herauszufinden. Meistens bemerkte ich die Dinge, die Java hatte, dass C # nicht, und war daher meistens frustriert. (Beispiel: Enum-Typen, die vollwertige Klassen sind, nicht nur ganze Zahlen mit einem frischen Anstrich) Seitdem habe ich die C # -Welt schätzen gelernt, aber ich kann nicht behaupten, dass ich Java gut genug kannte, um die beiden wirklich zu kontrastieren bin gespannt auf einen Community-Querschnitt.
Was sind die relativen Vorteile und Schwächen von C # und Java? Dies umfasst alles von der Sprachstruktur bis hin zu verfügbaren IDEs und Server-Software.
Vergleichen und kontrastieren Sie die Sprachen zwischen den beiden kann ziemlich schwierig sein, da es in vielerlei Hinsicht ist die assoziierte Bibliotheken, die Sie in Verbindung mit der Sprache, die am besten zeigt die verschiedenen Vorteile der anderen.
Ich werde also versuchen, so viele Dinge aufzulisten, an die ich mich erinnern kann oder die bereits veröffentlicht wurden, und notiere, wer davon überzeugt ist, dass er den Vorteil hat:
Das sind alles, worüber ich im Moment nicht nachdenken kann ... Ich bin mir sicher, dass Sie im wahrsten Sinne des Wortes Hunderte von Gegenständen aussuchen können, um sie zu vergleichen und zu kontrastieren. Hoffentlich ist diese Liste ein Querschnitt der häufiger verwendeten Funktionen ...
Ist das nicht schon zu Tode geschehen? Am Ende des Tages sind nicht die Werkzeuge wichtig, sondern das, was man mit ihnen macht.
Ein Unterschied ist, dass C # besser mit Windows arbeiten kann. Der Nachteil davon ist, dass es nicht gut mit etwas aber Windows funktioniert (außer vielleicht mit Mono , die ich nicht versucht habe).
Eine weitere Sache, die Sie beachten sollten, ist, dass Sie vielleicht auch ihre jeweiligen VMs vergleichen möchten.
Wenn Sie die CLR- und Java-VM vergleichen, erhalten Sie eine weitere Möglichkeit, zwischen den beiden zu unterscheiden.
Wenn zum Beispiel viel Multithreading ausgeführt wird, verfügt die Java-VM über ein stärkeres Speichermodell als die CLR (Entsprechung von .NET).
C # hat eine bessere GUI mit WPF, etwas, das Java traditionell schlecht gemacht hat.
C # hat LINQ, was ziemlich gut ist.
Sonst sind die 2 praktisch gleich - wie denken Sie, dass sie eine so große Klassenbibliothek so schnell erstellt haben, als .NET zum ersten Mal herauskam? Seitdem haben sich die Dinge leicht geändert, aber im Grunde könnte C # MS-Java heißen.
Nimm das nicht als eine Meinung, aber persönlich kann ich Java's GUI nicht ertragen. Es ist nur nahe genug an Windows, aber nicht ganz, so dass es in ein unheimliches Talgebiet kommt, in dem es mich wirklich aufregt.
C # (und andere .Net-Sprachen, nehme ich an) erlauben mir, Programme zu machen, die perfekt in Windows passen, und das macht mich glücklich.
Natürlich ist es müßig, wenn wir nicht über die Entwicklung einer Desktop-Anwendung sprechen ...
Du hast gesagt:
enum Typen, die vollwertige Klassen sind, nicht nur ganze Zahlen mit einem frischen Anstrich
Haben Sie sich die Ausgabe tatsächlich angesehen? Wenn Sie eine Anwendung mit Enums in in kompilieren, dann lesen Sie die CIL, Sie werden sehen, dass eine Enum ist eine versiegelte Klasse von System.Enum.
Werkzeuge wie der Reflektor von Red-Gate (ehemals Lutz Roeder) werden es so nah wie möglich an der ursprünglichen C # zerlegen, so dass es nicht leicht erkennbar ist, was tatsächlich unter der Haube passiert.
Wie Elizabeth Barrett Browning sagte: Wie kann ich dich lieben? Lass mich die Wege zählen.
Bitte entschuldigen Sie den qualitativen (vs. quantitativen) Aspekt dieses Posts.
Der Vergleich dieser beiden Sprachen (und der zugehörigen Laufzeiten) ist sehr schwierig. Vergleiche können auf vielen Ebenen erfolgen und konzentrieren sich auf viele verschiedene Aspekte (wie die in früheren Beiträgen erwähnte GUI-Entwicklung). Präferenz zwischen ihnen ist oft persönlich und nicht nur technisch.
C # basierte ursprünglich auf Java (und der CLR auf der JRE), aber IMHO ist im Allgemeinen in seinen Funktionen, seiner Aussagekraft und seinem möglichen Nutzen über Java hinausgegangen. Da C # von einem Unternehmen kontrolliert wird (gegen ein Komitee), kann C # schneller voranschreiten als Java. Die Unterschiede Ebbe und Flut über Releases mit Java spielen oft aufholen (wie zB die kürzliche Hinzufügung von Lambdas zu Java, die C # schon lange hatte). Keine der beiden Sprachen ist in allen Aspekten eine Supermenge des anderen, da beide Merkmale (und Schwächen) haben, die dem anderen fehlen.
Ein detaillierter Vergleich von Seite zu Seite würde wahrscheinlich mehrere 100 Seiten erfordern. Aber mein Netz ist, dass sie für die meisten modernen geschäftsbezogenen Programmieraufgaben in Leistung und Nutzen ähnlich sind. Der wichtigste Unterschied liegt wahrscheinlich in der Portabilität. Java läuft auf fast allen gängigen Plattformen, auf denen C # meist nur auf Windows-basierten Plattformen läuft (wobei Mono ignoriert wird, was bisher nicht sehr erfolgreich war). Java hat aufgrund seiner Portabilität wohl eine größere Entwickler-Community und somit mehr Unterstützung für Bibliotheken und Frameworks von Drittanbietern.
Wenn Sie das Gefühl haben, zwischen ihnen zu wählen, ist Ihr Interessensgebiet das beste Kriterium. Wenn Ihre gesamte Arbeit nur auf Windows-Systemen läuft, ist IMHO C # / CLR mit seiner reicheren Sprache und seiner Fähigkeit, direkt mit den nativen Windows-APIs zu interagieren, ein klarer Gewinner. Wenn Sie eine Systemübergreifende Portabilität benötigen, ist Java / JRE ein klarer Gewinner.
PS. Wenn Sie mehr portable Jobs Fähigkeiten benötigen, dann ist IMHO Java auch ein Gewinner.