Monday 18 December 2017

Why don't Java's +=, -=, *=, /= compound assignment operators require casting?

itemprop="text">

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 +=
j;
will compile fine.



Does it mean
that in fact i += j; is a shortcut for something like
this
i = (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 form E1 op= E2 is
equivalent to E1 = (T)((E1) op (E2)), where
T is the type of E1, 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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...