Win a copy of Learning OpenStack Networking: Build a solid foundation in virtual networking technologies for OpenStack-based clouds this week in the Cloud/Virtualization forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
  • Devaka Cooray
Sheriffs:
  • Jeanne Boyarsky
  • Knute Snortum
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Ganesh Patekar
  • Stephan van Hulst
  • Pete Letkeman
  • Carey Brown
Bartenders:
  • Tim Holloway
  • Ron McLeod
  • Vijitha Kumara

int as expression value  RSS feed

 
Ranch Hand
Posts: 84
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator


here b and c are byte but the expression (b+c) returns value as int
why the byte values are automatically converted to int..why not operate in
byte as well
 
Java Cowboy
Sheriff
Posts: 16084
88
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Same reason as in your other question; the declaration with assignment works because this is a special case. But the value that you are assigning must be a compile-time constant. The b + c expression in line 3 is not a compile-time constant.

And (byte)b + c doesn't work. The cast has a higher precendence than the + operator, which means that (byte)b + c is the same as ((byte)b) + c. So you cast b to byte (which is unnecessary because it is already a byte), then the + happens which returns an int. To make it work, you must cast the result of the + operator to byte by putting parentheses around the expression:

 
saravanan ragunathan
Ranch Hand
Posts: 84
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thanks for your answer and correction in my question...

but why the integer literals are automaticlly converted to int by default..why not byte,short,long
 
Sheriff
Posts: 21453
96
Chrome Eclipse IDE Java Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I guess that's a design decision of the Java developers. In the same line of thinking, you could ask yourself these questions:
- Why are literals from -128 to 127 int literals and not byte literals?
- Why are literals from -32768 to 32767 (excluding those from -128 to 127) int literals and not short literals?
- Why do long literals need an L? Any literal outside the range of int but inside the range of long could be long automatically.

In other words, the type of integer literals could have been dynamic, based on the range. The developers decided not to do this but use int as the default type, for both literals and mathematical expressions. That's something you'll now have to live with.
 
Saloon Keeper
Posts: 9223
177
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Because that's what they are. Integer literals are integers. How do you propose the JVM determines whether they should be bytes or shorts?
 
Rob Spoor
Sheriff
Posts: 21453
96
Chrome Eclipse IDE Java Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The range? There is a difference between integer (every whole number) and int.
For any given value x you could have the following type mapping (pseudo code):

Oh, and it isn't the JVM that should determine the size, it's the compiler. During runtime the variable containing the value determines the type.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!