2016-08-07 19 views
3

如果我除以零,我得到一個java.lang.ArithmeticException,如本例:如何在整數溢出時引發異常?

int a = 3/0; 

我想讓這個整數溢出也導致異常。所以下面的程序會拋出異常而不是打印-2147483648。

public static void main(String[] args) { 
    int a = Integer.MAX_VALUE + 1; 
    System.out.println(a); 
} 

我知道我可以使用BigInteger,它不會溢出,只受可用內存的限制。

我知道我可以讓自己的add函數檢查溢出。或者我可以使用Java 8 Math.addExact

我意識到我要求的行爲違背JLS at 15.18.2

如果整數加法溢出,那麼結果是低位在一些足夠大的 所表示的數學總和 位二進制補碼格式。如果發生溢出,那麼 結果的符號與兩個 操作數值的數學和的符號不同。

除了修改JVM的源代碼並使用這種修改後的JVM。有什麼辦法來實現這個嗎?甚至修改JVM的源代碼也是不夠的,因爲庫可能取決於這種行爲,我不希望它們受到此影響,只有我的代碼。

回答

5

我很抱歉地說,但你不能。

唯一的解決方案是編寫自己的功能或使用Math#addExact,如您所說。