Vergleich von CSharp und Java: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K (L-ectron-X verschob die Seite Vergleich zwischen CSharp und Java nach Vergleich von CSharp und Java: Titel und Inhalt)
(kein Unterschied)

Version vom 28. Juli 2018, 13:40 Uhr

Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten zwischen den 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 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
GUIs Swing und AWT (One-Step-Coding), Seit Java 7 ist 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