Я использую Clojure 1.4.0. Почему, если я добавляю Integer/MAX_VALUE
и 1, я получаю Long, но если я добавляю Integer/MAX_VALUE
сам к себе, я получаю исключение?
=> (def one 1)
=> (class one)
java.lang.Integer
=> (def max-plus-one (+ Integer/MAX_VALUE one))
=> max-plus-one
2147483648
=> (class max-plus-one)
java.lang.Long
=> (+ Integer/MAX_VALUE Integer/MAX_VALUE)
java.lang.ArithmeticException: integer overflow (NO_SOURCE_FILE:0)
Разве они не должны действовать одинаково? Почему добавление двух значений MAX_VALUE
приводит к переполнению, а добавление 1 — нет?
Я видел этот вопрос SO , но они ведут себя иначе, чем я.