Integer parameters formula returns integer

Code below makes foo value as -1149239296 т.е. integer value which is out of bounds:

int bar = 3000;
long foo = bar * 1024 * 1024;

Похоже на Java принимает type of first parameter and tryes to return formula's result with that type, В которой Java specification one can read that story?

I made such suggestion cause

int bar = 3000;
long foo = (long)bar * 1024 * 1024;

actually returns sets long значение для foo,

1 ответ

Решение

Для этого случая приведение любого из int литералы к long буду работать. Но с более длинными цепочками операторов, где переполнение может произойти где-то посередине, ассоциативность имеет значение. * Оператор является левоассоциативным, согласно разделу 15.17 JLS, поэтому первый литерал должен быть long чтобы избежать переполнения intс самого начала. Другие математические операторы также левоассоциативны.

Причина в том, что только один из литералов long необходимо из-за двоичного числового продвижения, Раздел 5.6.2 JLS, который будет продвигать более узкий тип к более широкому типу, по крайней мере int,

Другие вопросы по тегам