Esto imprime 83
System.out.println(0123)
Sin embargo, esto imprime 123
System.out.println(123)
¿Por qué funciona de esa manera?
Adaptador
Esto imprime 83
System.out.println(0123)
Sin embargo, esto imprime 123
System.out.println(123)
¿Por qué funciona de esa manera?
luiscubal
Un cero inicial indica que el literal se expresa usando octal (un número de base 8).
0123 se puede convertir haciendo (1 * 8 * 8) + (2 * 8) + (3)
, que es igual a 83 en decimal. Por alguna razón, los flotantes octales no están disponibles.
Simplemente no use el cero inicial si no tiene la intención de que el literal se exprese en octal.
También hay una 0x
prefijo que denota que el literal se expresa en hexadecimal (base 16).
caja de herramientas
Porque los literales enteros que comienzan con 0
se tratan como números octales.
Ver apartado 3.10.1 del JLS
Prueba esto:
public static String leftPad(int n, int padding) {
return String.format("%0" + padding + "d", n);
}
leftPad(5, 3); // return "005"
leftPad(15, 5); // return "00015"
leftPad(224, 3); // return "224"
leftPad(0, 4); // return "0000"
el primero impreso como 83 porque Java toma 0123 como número octal e imprime el equivalente decimal de ese número.
El octal (0 inicial) y el hexadecimal (0x inicial) se heredaron de C. A modo de comparación, intente
System.out.println(0x123);
Miguel
En Java, los literales enteros con un cero inicial son enteros octales (base 8).
(1 * 8^2) + (2 * 8^1) + (3 * 8^0) = 83
Por lo tanto, no use ningún número que comience con 0 si no desea tratarlo como un número octal.
Devendra Lattu
0123 -> 83
1010L -> 1010
0101L -> 65
Los números 1010L
y 0101L
no están en representación binaria (solo para evitar la confusión).
Estos números están en representación decimal.
Incluso según los patrones Regex en Documentos de Oracle,
\0n es el carácter con valor octal 0n (0 <= n <= 7)
\xhh es el carácter con valor hexadecimal 0xhh
Por lo tanto, su número 0101
ya sea en Integer
o Long
El formato se trata como una representación octal de un número.
123 => 1 * 8^2 + 2 * 8^1 + 1 * 8^0 = 83
0101 => 1 * 8^2 + 0 * 8^1 + 1 * 8^0 = 64 + 0 + 1 = 65