checked和unchecked操作符用于整型算術(shù)運(yùn)算時控制當(dāng)前環(huán)境中的溢出檢查。下列運(yùn)算參與了checked和unchecked檢查(操作數(shù)均為整數(shù)): 1) 預(yù)定義的++和――一元運(yùn)算符。 2) 預(yù)定義的-一元運(yùn)算符。 3) 預(yù)定義的+、-、×、/等二元操作符。 4) 從一種整型到另一種整型的顯示數(shù)據(jù)轉(zhuǎn)換。 當(dāng)上述整型運(yùn)算產(chǎn)生一個目標(biāo)類型無法表示的大數(shù)時,可以有相應(yīng)的處理方式: (一)使用checked 若運(yùn)算是常量表達(dá)式,則產(chǎn)生編譯錯誤:The operation overflows at complie time in checked mode. 若運(yùn)算是非常量表達(dá)式,則運(yùn)行時會拋出一個溢出異常:OverFlowException異常 (二)使用unchecked 無論運(yùn)算是否是常量表達(dá)式,都沒有編譯錯誤或是運(yùn)行時異常發(fā)生,只是返回值被截掉不符合目標(biāo)類型的高位。 (三)既未使用checked又未使用unchecked 若運(yùn)算是常量表達(dá)式,默認(rèn)情況下總是進(jìn)行溢出檢查,同使用checked一樣,會無法通過編譯。 若運(yùn)算是非常量表達(dá)式,則是否進(jìn)行溢出檢查,取決于外部因素,包括編譯器狀態(tài)、執(zhí)行環(huán)境參數(shù)等。 下例說明了checked和unchecked操作符在非常量表達(dá)式中的使用方法: class Test { static int x = 1000000; static int y = 1000000; static int F() { return checked(x*y); //運(yùn)行時拋出OverFlowException異常 } static int G() { return unchecked(x*y); //截去高位部分,返回-727379968 } static int H() { return x*y; //依賴于編譯器的默認(rèn)設(shè)置,一般是不檢查 } } checked和unchecked操作符在常量表達(dá)式中的使用方法: 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; //編譯錯誤,編譯無法通過 } } |
溫馨提示:喜歡本站的話,請收藏一下本站!