Why aren't op-assign operators type safe in java?

送分小仙女□ 提交于 2019-12-01 06:43:23

问题


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.


回答1:


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.




回答2:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!