• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Assignment of values

 
Vrushali Gore
Ranch Hand
Posts: 40
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
line1 byte b;

line2 b += 10;
line3 b = b + 10;
line4 b = 'b' + 1;



In line2 how does compiler compiles the program without giving error while at line3 we would get in error. In case of expressions byte, short & char is promoted to int so by that rule line4 should give error but still it compiles well

How this happens?
 
Ernest Friedman-Hill
author and iconoclast
Marshal
Pie
Posts: 24208
35
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,

Welcome to JavaRanch!

The compound assignment operators effectively include a cast to the appropriate type -- i.e.,

b += 10;

is actually not equivalent to

b = b + 10;

but rather

b = (byte) (b + 10);

So this explains line 2. Line 4 compiles because " 'b' + 1" is a constant expression which can be evaluated at compile time; the compiler can see that it is less than Byte.MAX_VALUE so there is no overflow, and the result is a byte constant.

Line 3, on the other hand, is evaluated at runtime. The compiler doesn't keep track of the values of variables on previous lines of code, so as far as it knows, the expression might overflow; therefore, this is an error.
 
Nipun Devlekar
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Really nice explanation
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic