Vergleich von CSharp und Java: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (1 Versionen)
K
 
(7 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten zwischen den Programmiersprachen [[C-Sharp|C#]] und [[Java]] auf.
+
Dieser Artikel zählt einige der wichtigsten Unterschiede und Gemeinsamkeiten der Programmiersprachen [[C-Sharp|C#]] und [[Java]] auf.
  
{| width="100%" border="0"
+
{| width="100%" border="1"
 
!width="20%" |
 
!width="20%" |
 
!width="40%" |Java
 
!width="40%" |Java
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 31: Zeile 31:
 
|-
 
|-
 
!Objektorientierung
 
!Objektorientierung
|align="center" |Alles ist objektorientiert bis auf die primitiven Datentypen. Diese werden seit Java5 automatisch in ihre Wrapperklassen gecastet.
+
|align="center" |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.
 
|align="center" |Alles ist objektorientiert bis auf die primitiven Datentypen. Diese werden automatisch in ihre Entsprechungen im System-Namespace gecastet.
 
|align="center" |Alles ist objektorientiert bis auf die primitiven Datentypen. Diese werden automatisch in ihre Entsprechungen im System-Namespace gecastet.
 
|-
 
|-
 
!Interfaces
 
!Interfaces
|align="center" |Existieren, können Methoden und Konstanten enthalten
+
|align="center" |Existieren, können [[Methode|Methoden]], Aufzählungen (enum) 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 (Seit Java 5)  
+
|align="center" |ja (seit Java 5)  
 
|align="center" |Ja
 
|align="center" |Ja
 
|-
 
|-
 
!structs
 
!structs
 
|align="center" |Nein
 
|align="center" |Nein
 +
|align="center" |Ja
 +
|-
 +
!Generics
 +
|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)
 
|-
 
|-

Aktuelle Version vom 28. Mai 2019, 14:05 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, 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