Почему JVM позволяет нам называть функцию, начинающуюся с цифры в байт-коде?

Идентификаторы хорошо определеныСпецификация языка Java, Java SE 7 Edition (§3.8)

An identifier is an unlimited-length sequence of Java letters and Java digits, the
first of which must be a Java letter.

Насколько я знаю, поскольку имя метода является идентификатором, должно быть невозможно назвать метод, начинающийся с цифры в Java, иjavac уважает это правило.

Итак, почему виртуальная машина Java, кажется, не соблюдает это правило, позволяя нам называть функцию, начинающуюся с цифр, в байт-коде?

Этот простой фрагмент на самом деле напечатаетf99() Имя метода и значение его параметра.

public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.f99(100));
    }

    public int f99(int i){
        System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
        return i;
    }
}

Компиляция и исполнение:

$ javac Test.java
$ java Test

Выход:

f99
100

Можно разобрать код после компиляции и переименовать всеf99 происходит99 (с помощью такого инструмента, какRej).

$ java Test

Выход:

99
100

Итак, название метода на самом деле "99"?

Ответы на вопрос(2)

Ваш ответ на вопрос