checked和unchecked操作符用于整型算術運算時控制目前環境中的溢出檢查。下列運算參與了checked和unchecked檢查(操作數均為整數):
1) 預定義的++和――一進制運算符。
2) 預定義的-一進制運算符。
3) 預定義的+、-、×、/等二進制操作符。
4) 從一種整型到另一種整型的顯示資料轉換。
當上述整型運算産生一個目标類型無法表示的大數時,可以有相應的處理方式:
(一)使用checked
若運算是常量表達式,則産生編譯錯誤:The operation overflows at complie time in checked mode.
若運算是非常量表達式,則運作時會抛出一個溢出異常:OverFlowException異常
(二)使用unchecked
無論運算是否是常量表達式,都沒有編譯錯誤或是運作時異常發生,隻是傳回值被截掉不符合目标類型的高位。
(三)既未使用checked又未使用unchecked
若運算是常量表達式,預設情況下總是進行溢出檢查,同使用checked一樣,會無法通過編譯。
若運算是非常量表達式,則是否進行溢出檢查,取決于外部因素,包括編譯器狀态、執行環境參數等。
下例說明了checked和unchecked操作符在非常量表達式中的使用方法:
class Test
{
static int x = 1000000;
static int y = 1000000;
static int F()
{
return checked(x*y); //運作時抛出OverFlowException異常
}
static int G()
{
return unchecked(x*y); //截去高位部分,傳回-727379968
}
static int H()
{
return x*y; //依賴于編譯器的預設設定,一般是不檢查
}
}
checked和unchecked操作符在常量表達式中的使用方法:
class Test
{
const int x = 1000000;
const int y = 1000000;
static int F()
{
return checked(x*y); //編譯錯誤,編譯無法通過
}
static int G()
{
return unchecked(x*y); //截去高位部分,傳回-727379968
}
static int H()
{
return x*y; //編譯錯誤,編譯無法通過
}
}