Vergleich von CSharp und Java

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen

Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten der Programmiersprachen C# und Java auf.

Java C#
Übersetzung javac übersetzt Quellcode in Java-Bytecode, JIT-Compiler kann diesen zur Laufzeit in Maschinencode übersetzen csc übersetzt Quellcode in IL-Code, JIT-Compiler kann diesen zur Laufzeit in Maschinencode übersetzen
Interpretation Bytecode wird von der JRE interpretiert IL-Code wird von der CLR interpretiert
Codestrukturierung Die Klassen werden in Packages eingeordnet, die der Ordnerstruktur entsprechen müssen. Diese werden mit import importiert, es wird dabei aber kein Quellcode direkt in die Datei eingebunden. Die Klassen werden in Namespaces eingeordnet. Diese werden mit using importiert, es wird dabei aber kein Quellcode direkt in die Datei eingebunden.
Variablentypen boolean, byte, char, short, int, long, float, double bool, sbyte, byte, char, short, ushort, int, uint, long, ulong, float, double, decimal
Mehrdimensionale Arrays nur Arrays von Arrays möglich Mehrdimensionale Arrays und Arrays von Arrays möglich
Variablenübergabe by value by value, mit Parametern ref oder out auch by reference
Objektorientierung Alles ist objektorientiert bis auf die primitiven Datentypen. Diese werden seit Java5 automatisch in ihre Wrapperklassen gecastet (Autoboxing). Seit Java 8 ist auch Funktionale Programmierung und Lambda-Ausdrücke möglich. Alles ist objektorientiert bis auf die primitiven Datentypen. Diese werden automatisch in ihre Entsprechungen im System-Namespace gecastet.
Interfaces Existieren, können Methoden, Aufzählungen (enum) und Konstanten enthalten Existieren, können Methoden, Properties, Indexer und Ereignisse enthalten
Zugriff auf Variablen getter/setter-Methoden Properties, die getter und setter Methoden implizieren
Polymorphie Laufzeitpolymorphie (late binding) Standardmäßig Kompilationszeitpolymorphie (early binding), mit den Schlüsselwörtern virtual und override auch late binding
Speichermanagement Automatisch per Garbage Collector Automatisch per Garbage Collector
enums ja (seit Java 5) Ja
structs Nein Ja
Generics Ja, (seit Java 5) Ja
GUIs Swing und AWT (One-Step-Coding), Von Java 7 bis Java 11 war JavaFX in die API integriert Windows Forms (One-Step-Coding)
Indexer Nein Ja
Funktionszeiger Nein Nein, aber Delegates
Reflection Ja Ja
Operatorüberladung Nein Ja
Pointer Nein Ja, in unsafe-Blöcken