Freigeben über


Operatoren (C# und Java im Vergleich)

Aktualisiert: November 2007

Wie in der folgenden Tabelle dargestellt, stellt C# alle anwendbaren Operatoren bereit, die von Java unterstützt werden. Am Ende der Tabelle finden Sie einige neue Operatoren, die zwar in C#, aber nicht in Java verfügbar sind:

Kategorie

Symbol

Unär

++--+-!~()

Multiplikativ

*/%

Additiv

+ -

Verschieben

<< >>

Relational

< > <= >= instanceof

Gleichheit

== !=

Logisches AND

&

Logisches XOR

^

Logisches OR

|

Bedingtes AND

&&

Bedingtes OR

||

Bedingungen

? :

Zuweisung

= *= /= %= += -= <<= >>= &= ^= |=

Operandtyp

typeof

Operandgröße

sizeof

Erzwingen der Überlaufprüfung

checked

Unterdrücken der Überlaufprüfung

unchecked

Der einzige Operator Java, der in C# nicht verfügbar ist, ist der Schiebeoperator (>>>). Dieser Operator existiert in Java nur aufgrund des Mangels an Variablen mit Vorzeichen in dieser Sprache. Er wird benötigt, wenn zum Einfügen einer 1 in die wichtigsten Bits eine Rechtsverschiebung erforderlich ist.

C# unterstützt Variablen ohne Vorzeichen und benötigt deshalb nur den Standardoperator >>. In Abhängigkeit davon, ob es sich um einen Operanden mit oder ohne Vorzeichen handelt, liefert dieser Operator unterschiedliche Ergebnisse. Die Rechtsverschiebung einer Zahl ohne Vorzeichen fügt im wichtigsten Bit eine 0 ein. Bei der Rechtsverschiebung einer Zahl mit Vorzeichen wird das zuvor wichtigste Bit kopiert.

Operator "checked" und Operator "unchecked"

Arithmetische Operationen führen zu einem Überlauf, wenn das Ergebnis für die Anzahl der Bits des verwendeten Datentyps zu groß ist. Ein derartiger Überlauf kann für eine bestimmte ganzzahlige arithmetische Operation mit dem checked-Schlüsselwort überprüft, bzw. mit dem unchecked-Schlüsselwort ignoriert werden. Wenn es sich bei dem Ausdruck um einen konstanten Ausdruck handelt, der checked verwendet, wird zur Kompilierzeit ein Fehler generiert.

Das folgende einfache Beispiel veranschaulicht die Verwendung der Operatoren:

class TestCheckedAndUnchecked
{
    static void Main()
    {
        short a = 10000;
        short b = 10000;

        short c = (short)(a * b);                     // unchecked by default
        short d = unchecked((short)(10000 * 10000));  // unchecked
        short e = checked((short)(a * b));            // checked - run-time error

        System.Console.WriteLine(10000 * 10000);  // 100000000
        System.Console.WriteLine(c);              // -7936
        System.Console.WriteLine(d);              // -7936
        System.Console.WriteLine(e);              // no result
    }    
}

In diesem Codebeispiel wird mit dem Operator "unchecked" ein Kompilierungsfehler umgangen, der andernfalls durch die folgende Anweisung verursacht würde:

short d = unchecked((short)(10000 * 10000));  // unchecked

Der nächste Ausdruck wird standardmäßig nicht überprüft, sodass ein Überlauf des Werts unbemerkt bleibt:

short c = (short)(a * b);                     // unchecked by default

Mit dem Operator "checked" können Sie eine Überlaufprüfung des Ausdrucks zur Laufzeit erzwingen:

short e = checked((short)(a * b));            // checked - run-time error

Wenn Sie die beiden ersten Werte d und c zuweisen, führt dies beim Ausführen des Programms mit dem Wert -7936 unbemerkt zu einem Überlauf. Wenn Sie versuchen, den Wert für e mit checked() zu multiplizieren, löst das Programm eine OverflowException aus.

Hinweis:

Sie können die Prüfung auf arithmetischen Überlauf entweder in einem Codeblock mit dem Befehlszeilen-Compilerschalter (/checked) oder direkt in Visual Studio für das gesamte Projekt aktivieren bzw. deaktivieren.

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

C#-Operatoren

Weitere Ressourcen

Die Programmiersprache C# für Java-Entwickler