共用方式為


運算子 (C# 與 Java 的比較)

更新:2007 年 11 月

C# 提供了 Java 支援的所有適用運算子 (如下表所示)。您可以在表格的結尾看到一些可在 C# 中使用、但不能在 Java 中使用的新運算子:

分類

符號

一元

++--+-!~()

乘法類 (Multiplicative)

*/%

加法類 (Additive)

+ -

移位 (Shift)

<< >>

關係類

< > <= >= instanceof

相等

== !=

邏輯 AND

&

邏輯 XOR

^

邏輯 OR

|

條件式 AND

&&

條件式 OR

||

條件式

? :

設定

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

運算元型別

typeof

運算元大小

sizeof

強制執行溢位檢查

checked

抑制溢位檢查

unchecked

C# 中唯一不支援的 Java 運算子是移位運算子 (>>>)。這個運算子存在於 Java 中是在向右移位時需要在最大顯著性位元插入 1,這個程式語言不提供不帶正負號的變數。

C# 支援不帶正負號的變數,因此,C# 只需要標準的 >> 運算子。這個運算子將依據運算元是否帶正負號而產生不同的結果。向右移位不帶正負號的數字,會在最大顯著性位元中插入 0;向右移位帶正負號的數字,則會複製原本的最大顯著性位元。

Checked 和 Unchecked 運算子

算術運算的結果對於配置給使用中資料型別的位元數而言如果太大,那麼將會發生溢位。使用 checked 和 unchecked 關鍵字的特定整數算術運算,可以檢查或忽略這類的溢位。如果運算式是使用 checked 的常數運算式,那麼在編譯時期便會產生錯誤。

以下是說明這些運算子的簡單範例:

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
    }    
}

在這個程式碼中,unchecked 運算子規避了可能會由以下陳述式造成的編譯時期錯誤:

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

以下的運算式預設為 unchecked,因此值會以無訊息方式發生溢位:

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

利用 checked 運算子,我們可以強迫運算式在執行階段執行溢位檢查:

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

如果指派前兩個值給 d 和 c,程式在執行時會以無訊息方式發生溢位,其值為 -7936;不過,當您使用 checked() 嘗試為 e 乘上這個值時,程式將擲回 OverflowException

注意事項:

您也可以使用命令列編譯器參數 (/checked) 來控制是否檢查某一程式碼區塊中的算術溢位,或者是要直接在 Visual Studio 中根據不同的專案來進行檢查。

請參閱

概念

C# 程式設計手冊

參考

C# 運算子

其他資源

Java 開發人員可用的 C# 程式設計語言