Целочисленное переполнение Clojure

Я использую 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 , но они ведут себя иначе, чем я.

7
задан Community 23 May 2017 в 12:23
поделиться