Учитель, вы определили, что комментарии Java не будут выполняться?

Java

Я поделился в блоге статьей, включающей комментарии на Java, я написал предложение по обету: «Комментарий не будет выполнен!» В результате появляется небольшое партнерское сообщение «Учитель, вы уверены? "

У меня всегда было преимущество в том, что я мог слушать голоса других людей.Неважно, хвалите вы или критикуете, я всегда принимаю это непредвзято. Потому что я считаю, что большинство маленьких друзей служат благим целям.

Кроме того, технически я никогда не думал о том, чтобы стать великим боссом, я просто хотел поделиться своим чувством, вот и все. Я оставляю многие ошибки в статьях как есть, потому что если их исправить, те, кто укажут на ошибки в комментариях, сочтут это неуместным в глазах последующих читателей.

Эти диссы, мои маленькие друзья, не волнуйтесь, я не буду возражать.

Тем не менее, я действительно не могу комментировать этот вопрос! Комментарий точно не будет выполнен, я думаю, что этот маленький друг должен быть сарказмом меня. Поэтому я в частном порядке спросил его, почему, и он выдал мне следующий код:

public class Test {
    public static void main(String[] args) {
        String name = "沉默王二";
        // \u000dname="沉默王三";
        System.out.println(name);
    }
}

Я скопировал его в IDEA и запустил, и вывод программы оказался неожиданным:

沉默王三

Оказалось, что Ван Сан, не Ван. Когда я увидел этот результат, я был полностью ошеломлен.

В этот момент я чувствую, что десятилетие Java будет белой школой. Университет, который был бы, учитель сказал, что комментарий не был выполнен, даже "программные идеи" также сказал, что комментарии не будут реализованы. Итак, теперь кто может сказать мне, в конце концов, почему?

Разве это не означает, что мир программирования очень прост? Либо 0, либо 1? Когда дело дошло до этого момента, я мог только внимательно изучить его.

С чисто кодовой точки зрения проблема должна заключаться в строке специальных символов——\u000d, если бы не он, изменив значение названия с "Silent King II" на "Silent King III", другой причины бы не было - больше ничего, с многолетним стажем работы, я до сих пор очень на корень проблемы.

\u000dХотя это выглядит незнакомо, я знаю, что это символ Unicode. Спросив поисковую систему, я понял, что это символ новой строки — внезапное осознание. Я знаю, что компилятор Java не только компилирует код, но и разбирает символы Юникода.

Я взглянул на скомпилированный байт-код кода выше, и он выглядит так:

// class version 58.65535 (-65478)
// access flags 0x21
public class com/cmower/dzone/secret/Test {

  // compiled from: Test.java

  // access flags 0x1
  public <init>()V
   L0
    LINENUMBER 3 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
    RETURN
   L1
    LOCALVARIABLE this Lcom/cmower/dzone/secret/Test; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  // access flags 0x9
  public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 5 L0
    LDC "\u6c89\u9ed8\u738b\u4e8c"
    ASTORE 1
   L1
    LINENUMBER 6 L1
    LDC "\u6c89\u9ed8\u738b\u4e09"
    ASTORE 1
   L2
    LINENUMBER 7 L2
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    ALOAD 1
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
   L3
    LINENUMBER 8 L3
    RETURN
   L4
    LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
    LOCALVARIABLE name Ljava/lang/String; L1 L4 1
    MAXSTACK = 2
    MAXLOCALS = 2
}

Хм, я не понимаю. Но это не беда, просто декомпилируйте его, поэтому я вижу следующий код:

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        String name = "沉默王二";
        name = "沉默王三";
        System.out.println(name);
    }
}

Эй, два обратной коса//Его действительно нет, и это точно — аннотации действительно выполняться не будут. Только\u000dПучокname="沉默王三";сжатый//Прокомментируйте следующую строку, как в следующем коде:

public class Test {
    public static void main(String[] args) {
        String name = "沉默王二";
        //
        name="沉默王三";
        System.out.println(name);
    }
}

Так это ошибка Java? Это даже не считается.

Поскольку, позволяя исходному коду Java содержать символы Unicode, вы можете гарантировать, что код, написанный в любой части мира, будет выполняться в другом месте.

Честно говоря, этот абзац найден в Интернете, вроде и понятно, и не понятно. Это требует другого кода:

double π = Math.PI;
System.out.println(\u03C0);

Предположим, что программист Сяо Ван не знал, когда создавал переменную частоту циклов.πКак набрать этого персонажа, то он может выбрать для использования\u03C0вместо этого - компилятор знает\u03C0этоπЭта переменная (компилятор будет анализировать символы Юникода перед компиляцией другого кода).

могу только сказать\u000dЭто исключение.

Конечно, за исключением особых случаев, не включайте символы Unicode в исходный код, чтобы не изменить первоначальное значение исходного кода.

Эта статья не имеет другого смысла, и я не хочу исследовать слишком эзотерические вещи, просто чтобы привлечь внимание моих друзей: комментарии могут выполняться компилятором. Это похоже на то, что если Лу Синь не знал, что есть 4 способа написать слово «фенхель» для обозначения бобов укропа, то он не может заставить Конга Иджи действовать в чайхане в Лючжэне.

Конечно, если маленький партнер хочет испытать чувство притворства, вы можете сохранить следующий код в файле с именем Ugly.java:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020

\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079

\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020

\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063

\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028

\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020

\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b

\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074

\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020

\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b

\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

Выполнить сначала в командной строкеjavac Ugly.java, а затем выполнитьjava UglyПосмотреть результат работы программы можно командой:

Hello world

Испытав, буду тянуть. Да и вообще писать такой код никто не может, кроме машины. Хорошо, мой дорогой друг-читатель, все вышеизложенное — это статья. Ощущение, что когнитивная граница расширилась?

Я был молчаливым королем, одним интересным программистом. Если вы считаете, что ваша статья немного поможет, поищите в WeChat »Тихий король 2"Прочтите это в первый раз, ответьте [666] Есть также обучающие видео высокой четкости 500G (по категориям), которые я тщательно подготовил для вас.

эта статьяGitHubОн был включен, и есть полные тестовые площадки для интервью на крупных заводах Добро пожаловать в Star.

Оригинальность непроста, не просите пустой билет, пожалуйста, поставьте лайк этой статье, что будет моей сильнейшей мотивацией писать больше качественных статей.