Until today, I thought that for
example:
i +=
j;
Was just
a shortcut for:
i = i +
j;
But if we try
this:
int i = 5;
long j
= 8;
Then
i = i + j;
will not compile but i +=
will compile fine.
j;
Does it mean
that in fact i += j;
is a shortcut for something like
thisi = (type of i) (i + j)
?
Answer
As always with these questions, the JLS holds
the answer. In this case href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">§15.26.2
Compound Assignment Operators. An
extract:
A
compound assignment expression of the formE1 op= E2
is
equivalent toE1 = (T)((E1) op (E2))
, where
T
is the type ofE1
, except that
E1
is evaluated only
once.
An
example cited from href="http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">§15.26.2
[...] the following code is
correct:short x = 3;
x
+= 4.6;
and results in x having the value 7 because it is equivalent
to:short x = 3;
x =
(short)(x +
4.6);
In
other words, your assumption is correct.
No comments:
Post a Comment