I'm not sure the question is clearly worded, but an example will be clearer.
I found out that will not work in Java:
int a = ...;
a = 5.0;
but this will:
int a = ...;
a += 5.0;
I.e., it seems that the = operator is type safe but += isn't. Is there any deep reason for this or is it just another arbitrary decision language designers must take.
To make life easier.
Let's go a little further. Consider:
byte b;
...
++b;
The increment is really doing:
b = (byte)(1 + (int)b);
Even using +=
it doesn't get any better:
b += b;
is:
b = (byte)((int)b+(int)b);
That would make these operators useless for byte/short/char.
Of course I wont be happy until we have arbitrary sized integers.
The reason is that math operations do some implicit casting:
a += 5.0;
is evaluated as follows:
a = (int) ((double) a + 5.0);
Assignment, however, requires an explicit cast.
(It might be float rather than double, I don't remember which Java treats as decimal literals.)
来源:https://stackoverflow.com/questions/590868/why-arent-op-assign-operators-type-safe-in-java