John Kugelmanの回答を、直接編集することで置き換えずに構築したいと思います。これは、2の補数の整数には当てはまらないの対称性のためMIN_VALUE = -10、彼のテストケース(、MAX_VALUE = 10)で機能しMIN_VALUE == -MAX_VALUEます。実際には、MIN_VALUE == -MAX_VALUE - 1。
scala> (java.lang.Integer.MIN_VALUE, java.lang.Integer.MAX_VALUE)
res0: (Int, Int) = (-2147483648,2147483647)
scala> (java.lang.Long.MIN_VALUE, java.lang.Long.MAX_VALUE)
res1: (Long, Long) = (-9223372036854775808,9223372036854775807)
trueに適用された場合MIN_VALUEやMAX_VALUE、ジョン・Kugelmanの答えは、オーバーフローケース生成a == -1とb ==(最初のカイルが提起した時点)何かを。これを修正する方法は次のとおりです。
long maximum = Long.signum(a) == Long.signum(b) ? Long.MAX_VALUE : Long.MIN_VALUE;
if ((a == -1 && b == Long.MIN_VALUE) ||
    (a != -1 && a != 0 && ((b > 0 && b > maximum / a) ||
                           (b < 0 && b < maximum / a))))
{
    // Overflow
}
それは一般的なソリューションではありません MIN_VALUEとMAX_VALUE、それはJavaのために一般的であるLongとIntegerの任意の値aとb。