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
,