Vergleich von CSharp und Java: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten | Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten der Programmiersprachen [[C-Sharp|C#]] und [[Java]] auf. | ||
{| width="100%" border="1" | {| width="100%" border="1" | ||
| Zeile 15: | Zeile 15: | ||
|- | |- | ||
!Codestrukturierung | !Codestrukturierung | ||
|align="center" |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. | |align="center" |Die [[Klasse|Klassen]] werden in Packages eingeordnet, die der Ordnerstruktur entsprechen müssen. Diese werden mit <code>import</code> importiert, es wird dabei aber kein Quellcode direkt in die Datei eingebunden. | ||
|align="center" |Die Klassen werden in Namespaces eingeordnet. Diese werden mit using importiert, es wird dabei aber kein Quellcode direkt in die Datei eingebunden. | |align="center" |Die Klassen werden in Namespaces eingeordnet. Diese werden mit <code>using</code> importiert, es wird dabei aber kein Quellcode direkt in die Datei eingebunden. | ||
|- | |- | ||
!Variablentypen | !Variablentypen | ||
| Zeile 35: | Zeile 35: | ||
|- | |- | ||
!Interfaces | !Interfaces | ||
|align="center" |Existieren, können Methoden und Konstanten enthalten | |align="center" |Existieren, können [[Methode|Methoden]] und Konstanten enthalten | ||
|align="center" |Existieren, können Methoden, Properties, Indexer und Ereignisse enthalten | |align="center" |Existieren, können [[Methode|Methoden]], Properties, Indexer und Ereignisse enthalten | ||
|- | |- | ||
!Zugriff auf Variablen | !Zugriff auf Variablen | ||
| Zeile 51: | Zeile 51: | ||
|- | |- | ||
!enums | !enums | ||
|align="center" |ja ( | |align="center" |ja (seit Java 5) | ||
|align="center" |Ja | |align="center" |Ja | ||
|- | |- | ||
| Zeile 59: | Zeile 59: | ||
|- | |- | ||
!Generics | !Generics | ||
|align="center" |Ja, seit | |align="center" |Ja, (seit Java 5) | ||
|align="center" |Ja | |align="center" |Ja | ||
|- | |- | ||
!GUIs | !GUIs | ||
|align="center" |[[Swing]] und [[AWT]] (One-Step-Coding), | |align="center" |[[Swing]] und [[AWT]] (One-Step-Coding), Von Java 7 bis Java 11 war JavaFX in die [[API]] integriert | ||
|align="center" |Windows Forms (One-Step-Coding) | |align="center" |Windows Forms (One-Step-Coding) | ||
|- | |- | ||
Version vom 28. Juli 2018, 13:45 Uhr
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 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 |
