Tags

Contextual difference between compound assignment and normal assignment.

var += x;  with respect to

var = var + x;

byte byteVar = 1;
shortshortVar=Short.MAX_VALUE;
System.out.println(byteVar+ " , "+shortVar);
System.out.println("Binary Representation: "+Integer.toBinaryString(byteVar)+" : "+ Integer.toBinaryString(shortVar));
byteVar+=shortVar; //try replacing with other expression
System.out.println("After adding values");
System.out.println(byteVar+ " , "+shortVar);
System.out.println("Binary Representation: "+Integer.toBinaryString(byteVar)+" : "+ Integer.toBinaryString(shortVar));

If you add this statement in place of statement 9 the following error results.

byteVar=byteVar+shortVar;

java.lang.RuntimeException: Uncompilable source code – possible loss of precision

JLS 15.26.2 says

            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.           

byteVar+=shortVar;

is computed as

byteVar=(byte) byteVar+shortVar;

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

The compound assignment operator is simple and use it if operand types are same.

If it deals with different operand types use it with care.

Don’t use it with

operand1+= operand2

if operand2 size is greater than operand1. Eg. Operand1 is byte or short and operand2 is int

operand1 is of type integer and operand2 is of type float,long,double.

Advertisements