3

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.

Dave Swersky
  • 34,502
  • 9
  • 78
  • 118
flybywire
  • 261,858
  • 191
  • 397
  • 503

2 Answers2

5

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.)

Powerlord
  • 87,612
  • 17
  • 125
  • 175
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.

Tom Hawtin - tackline
  • 145,806
  • 30
  • 211
  • 305