Dies druckt 83
System.out.println(0123)
Dies druckt jedoch 123
System.out.println(123)
Warum funktioniert das so?
IAdapter
Dies druckt 83
System.out.println(0123)
Dies druckt jedoch 123
System.out.println(123)
Warum funktioniert das so?
luiskubal
Eine führende Null gibt an, dass das Literal mit ausgedrückt wird Oktal (eine Zahl zur Basis 8).
0123 kann dadurch umgewandelt werden (1 * 8 * 8) + (2 * 8) + (3)
, was dezimal 83 entspricht. Aus irgendeinem Grund sind Oktal-Floats nicht verfügbar.
Verwenden Sie einfach nicht die führende Null, wenn das Literal nicht in Oktal ausgedrückt werden soll.
Da ist auch ein 0x
Präfix, das angibt, dass das Literal hexadezimal (Basis 16) ausgedrückt wird.
Werkzeugkasten
Da Integer-Literale beginnend mit 0
werden als Oktalzahlen behandelt.
Siehe Abschnitt 3.10.1 des JLS
Versuche dies:
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"
Die erste wird als 83 gedruckt, weil Java 0123 als Oktalzahl nimmt und das Dezimaläquivalent dieser Zahl druckt.
Oktal (führende 0) und Hexadezimalzahl (führende 0x) wurden von C geerbt. Versuchen Sie es zum Vergleich
System.out.println(0x123);
Michael
In Java sind Integer-Literale mit führender Null oktale Integer (Basis 8).
(1 * 8^2) + (2 * 8^1) + (3 * 8^0) = 83
Verwenden Sie also keine Zahl, die mit 0 vorangeht, wenn Sie sie nicht als Oktalzahl behandeln möchten.
Devendra Lattu
0123 -> 83
1010L -> 1010
0101L -> 65
Die Zahlen 1010L
und 0101L
sind nicht in binärer Darstellung (nur um Verwirrung zu vermeiden).
Diese Zahlen sind in Dezimaldarstellung.
Sogar gemäß den Regex-Mustern in Oracle-Dokumente,
\0n ist das Zeichen mit dem Oktalwert 0n (0 <= n <= 7)
\xhh ist das Zeichen mit dem Hexadezimalwert 0xhh
Also deine Nummer 0101
sei es drin Integer
oder Long
Format wird als Oktaldarstellung einer Zahl behandelt.
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