Ich möchte nur eines klarstellen. Dies ist keine Frage, bei der es besser ist, diesen Teil überlasse ich jemand anderem, um darüber zu diskutieren. Es interessiert mich nicht. Diese Frage wurde mir in meinem Vorstellungsgespräch gestellt und ich dachte, es könnte nützlich sein, 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 auch C # in Betracht gezogen werden, aber ich glaube, es ist ein bisschen übertrieben. Warum? Nun, wenn eine neue Version von Java fertig ist, ist sie gleichzeitig auf allen unterstützten Plattformen verfügbar. Wie viele Funktionen von C # 3.0 fehlen jedoch noch in der Mono-Implementierung? Oder ist es wirklich CLR vs. JRE , die wir hier vergleichen sollten?
- Java unterstützt keine Ereignisse und Delegaten. Soweit ich weiss.
- In Java sind alle Methoden virtuell
- Entwicklungswerkzeuge: Ich glaube, es gibt noch kein solches Werkzeug 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: Ich bin gerade auf den Gedanken gekommen, Java hat keine benutzerdefinierten Attribute für Klassen, Methoden usw. Oder doch?
Antworten:
Vergleich von Java 7 und C # 3
(Einige Funktionen von Java 7 werden hier nicht erwähnt, aber der
using
Anweisungsvorteil aller Versionen von C # gegenüber Java 1-6 wurde entfernt.)Nicht alle Ihre Zusammenfassungen sind korrekt:
Darüber hinaus (und was steht bereits in Ihrer Zusammenfassung):
List<byte>
alsbyte[]
Hintergrund und nicht als Array von Boxbytes).ref
undout
zum Übergeben von Parametern als ReferenzDies ist nicht erschöpfend, deckt aber alles ab, was ich mir vorstellen kann.
quelle
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
quelle
TimeDate
Klasse ändern , um immer Zeit zu haben, und hatte noch keine Zeit dafür :(C # verfügt über automatische Eigenschaften, die unglaublich praktisch sind und auch dazu beitragen, Ihren Code sauberer zu halten, zumindest wenn Ihre Getter und Setter keine benutzerdefinierte Logik enthalten.
quelle
Funktionen von C # in Java nicht vorhanden • C # enthält primitivere Typen und die Funktionalität zum Abfangen von arithmetischen Ausnahmen.
• Enthält eine große Anzahl von Notationskomfort über Java, von denen viele, wie das Überladen von Operatoren und benutzerdefinierte Casts, der großen Community von C ++ - Programmierern bereits bekannt sind.
• Die Ereignisbehandlung ist ein "erstklassiger Bürger" - sie ist Teil der Sprache selbst.
• Ermöglicht die Definition von "Strukturen", die Klassen ähneln, aber auf dem Stapel zugewiesen 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 mit Zeichenfolgen arbeiten.
• C # ermöglicht anonyme Methoden, die Schließfunktionen bereitstellen.
• C # ermöglicht einen Iterator, der Co-Routinen über ein Yield-Schlüsselwort im funktionalen Stil verwendet.
• C # unterstützt Ausgabeparameter und unterstützt die Rückgabe mehrerer Werte, eine Funktion, die von C ++ und SQL gemeinsam genutzt wird.
• C # kann Namespaces aliasen.
• C # verfügt über "Explicit Member Implementation", mit der eine Klasse Methoden einer Schnittstelle spezifisch implementieren kann, die von ihren eigenen Klassenmethoden getrennt sind. Dies ermöglicht es auch, zwei verschiedene Schnittstellen zu implementieren, die zufällig eine Methode mit demselben 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 mit COM.
• Nach dem Beispiel von C und C ++ ermöglicht C # den Aufruf als Referenz für Grund- und Referenztypen.
Funktionen von Java in C # nicht vorhanden
• Das Java-Schlüsselwort strictfp garantiert, dass das Ergebnis von Gleitkommaoperationen plattformübergreifend gleich bleibt.
• Java unterstützt geprüfte Ausnahmen zur besseren Durchsetzung der Fehlerbehebung und -behandlung.
quelle
Eine weitere gute Ressource ist http://www.javacamp.org/javavscsharp/. Diese Website enthält viele Beispiele, die fast alle Unterschiede zwischen diesen beiden Programmiersprachen veranschaulichen.
Über die Attribute verfügt Java über Anmerkungen, die fast genauso funktionieren.
quelle
Generika:
Mit Java-Generika 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 überall ersetzt. Wenn Sie beispielsweise eine
Foo<T>
Klasse haben, generiert der Java-Compiler Bytecode so, als ob dies der Fall wäreFoo<Object>
. Dies bedeutet, dass das Casting und auch das Boxen / Unboxen im "Hintergrund" erfolgen müssen.Ich spiele jetzt schon eine Weile mit Java / C # und meiner Meinung nach sind die Hauptunterschiede auf Sprachebene, wie Sie betont haben, Delegierte.
quelle
Bitte gehen Sie über den unten angegebenen Link msdn.microsoft.com/en-us/library/ms836794.aspx. Er behandelt sowohl die Ähnlichkeit als auch den Unterschied zwischen C # und Java
quelle