天天看點

關于java中邊界值校驗的問題

web開發中,校驗這個工作是必不可少的。一般來說,界面中需要加上javascript校驗,但我們知道它并不可靠,很容易被繞過。那麼在伺服器端就需要加上背景校驗。請看下面這種很常見的代碼:

if(num>0 && num+1000<=2000){

    System.out.println("這個數合法!");

}else{

    System.out.println("這個數不合法!");

}

乍一看沒問題,就是普通的參數校驗,num值必須大于0,而且它加上1000必須小于2000。

如果令num=300,執行結果顯而易見是這樣的:

這個數合法!

結果沒有問題。

但如果令num=2147483647,輸出結果又是如何呢?答案是:

這個數合法!

num值本身顯然已經超過2000了,為什麼還會列印出“這個數合法”呢?

答案就是:num是int型的最大邊界值,num+1000已經超出了int的最大值,如果将它列印出來,可以看到num+1000是:-2147482649,當然是小于2000的

結論告訴我們,在java端參數校驗時,必須要校驗邊界值。其實在單元測試标準裡,三個值是必須測試的:0、正最大、負最小。如果這三個值都沒有問題,才可以測試其它邏輯。