Печать восьмеричных символов в 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'.

Другие вопросы по тегам