¿Por qué 09 es “demasiado grande” de un número entero?

Ellos piensan que es:

Posible duplicado:
Entero con ceros a la izquierda

Pero si selecciona Entero con ceros a la izquierda, entonces encontrará que la pregunta es si antes del lanzamiento de jdk7 y por lo tanto tiene menos esfuerzo de investigación. Pero en jdk7 hay algunos cambios y adiciones a los enteros. Aquí están las respuestas que están actualizadas que cubren jdk7.

Tengo un código:

class Test{ public static void main(String[] args){ int x=09; System.out.println(x); } } 

En la comstackción, da un error: el número entero es demasiado grande: 09

¿Por qué lo hace?

De nuevo, si cambio el código a:

 class Test{ public static void main(String[] args){ int x=012; System.out.println(x); } } 

Ahora la salida es 10

¿Por qué da la salida 10 en lugar de 12?

Los números que comienzan con 0 se consideran octales , y 9 no es un dígito octal (pero (convencionalmente) 0-7 son).


Los literales hexadecimales comienzan con 0x , por ejemplo, 0xA .


Hasta Java 6, no había una notación literal para el binario y tendrías que usar algo como

 int a = Integer.parseInt("1011011", 2); 

donde el segundo argumento especifica la base deseada.


Java 7 ahora tiene literales binarios .

En Java SE 7, los tipos integrales (byte, short, int y long) también pueden expressse utilizando el sistema de números binarios. Para especificar un literal binario, agregue el prefijo 0b o 0B al número.

Los literales enteros que comienzan con un “0” se tratan como octal. Los dígitos permitidos son de 0 a 7.

Los enteros que comienzan con el dígito 0 son números octales (base 8). El dígito octal más grande es 7; después de 07 viene 010 (que es igual a decimal 8!)

012 (octal doce) es 010 (octal diez, que es decimal 8) más 2 o decimal 10.

09 es un literal numérico octal, aunque inválido.

Los números hexadecimales comienzan con 0x, como 0xFFFF.

Solía ​​haber un literal binario en Java. Java 7 los admite, comenzando con 0b, como 0b00100001.

Los números que comienzan con 0 son números octales. http://en.wikipedia.org/wiki/Octal