An `int`

divided by an `int`

is an int, and a
`double`

divided by a `double`

is a
`double`

, but what about an `int`

divided by a
`double`

or a `double`

divided by an
`int`

? When doing arithmetic on unlike types Java tends to
widen the types involved so as to avoid losing information. After
all 3 * 54.2E18 will be a perfectly valid `double`

but
much too big for any `int`

.

The basic rule is that if either of the variables in a binary
operation (addition, multiplication, subtraction, addition,
remainder) are doubles then Java treats both values as doubles. If
neither value is a `double`

but one is a
`float`

, then Java treats both values as floats. If neither is
a float or a double but one is a `long`

, then Java
treats both values as longs. Finally if there are no doubles,
floats or longs, then Java treats both values as an
`int`

, even if there aren't any ints in the equation.
Therefore the result will be a `double`

,
`float`

, `long`

or `int`

depending on
the types of the arguments.