Why Is 08 Not a Valid Integer Literal in Java

Why is 08 not a valid integer literal in Java?

In Java and several other languages, an integer literal beginning with 0 is interpreted as an octal (base 8) quantity.

For single-digit numbers (other than 08 and 09, which are not allowed), the result is the same, so you might not notice that they are being interpreted as octal. However, if you write numbers with more than one significant digit you might be confused by the result.

For example:

010 ==  8
024 == 20

Since octal literals are usually not what you want, you should always take care to never begin an integer literal with 0, unless of course you are actually trying to write zero by itself.

Integer Number too large in java int for the value 08 , but when I pass just 8 or 11,12,13 it is just fine

It's because, in Java, numbers that start with a leading 0 (like your 08) are treated as octal (base 8). And there is no 8 in octal.

(By definition octal only uses the digits 0-7)

As an experiment, you can try 07 or 011 and see that they work, or try 08 or 09 and see that they don't work.

Difference between 08 and 8 in for int variable in java

Literal integer types starting at 0 are interpreted as octal base. Octal base doesn't allow 8, only digits from 0 to 7.

Data types in Java

An integer literal with a leading 0 is an octal literal, and 8 isn't a valid digit within octal literals.

If you actually want a value of 786 decimal, just remove the leading 0:

double a = 786;

09 is not recognized where as 9 is recognized

In java, if you are defining an integer, a leading '0' will denote that you are defining a number in octal

int i = 07; //integer defined as octal
int i = 7; // integer defined as base 10
int i = 0x07; // integer defined as hex
int i = 0b0111; // integer defined as binary (Java 7+)

Do underscores alter the behaviour of Integers?

Integers in your code that start with "0" are interpreted using the Octal system instead of the decimal system.

So your 010 in Octal is equivalent to 8 in Decimal.

Your 0_1 and your 0_0_1 are also interpreted this way, but you can't see it since they all represent 1 in all number systems.

Other number systems that the Java compiler understands are Hexadecimal with the prefix "0x" (so 0x10 is equivalent to 16 in Decimal) and Binary with the prefix "0b" (so 0b10 is equivalent to 2 in Decimal).

Java compiler shows error that “integer is too large”

Try this instead:

int i = 5955555;

In Java, an integer number starting with 0 is interpreted as being in octal base - and in that base, you can't have the digit 9.



Related Topics



Leave a reply



Submit