Печать восьмеричных символов в java с использованием escape-последовательностей
Пожалуйста, объясните код ниже
public class Example{
public static void main(String[] args)
{
int i[]={9};
System.out.println("\700");
}
}
Пожалуйста, не говорите мне, что восьмеричное значение должно быть меньше 377. Я уже знаю это, но когда я запускаю вышеупомянутую программу, я получаю вывод как 80. Я хочу знать, почему так происходит?
Пожалуйста, дайте четкое объяснение. Спасибо
1 ответ
По сути, у вас есть два персонажа: '\70'
а также '0'
,
Экранирующая последовательность для восьмеричных чисел задокументирована в JLS как:
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
Последнее из них не применимо в вашем случае, так как "7" отсутствует в ZeroToThree, но "7" и "0" являются восьмеричными цифрами, поэтому он соответствует второму шаблону.
Итак, теперь нам просто нужно знать, почему '\70'
равно '8'... и это потому, что восьмеричное 70 является десятичным 56 или шестнадцатеричным 38, что является кодовой единицей UTF-16 для '8'.