Язык сборки cmp [дубликат]

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
15
задан Peter Cordes 2 December 2017 в 06:32
поделиться

1 ответ

Как вы могли прочитать в руководстве, JG интерпретирует флаги, как если бы сравнение было подписано, а JA интерпретирует флаги, как если бы сравнение было неподписанным (конечно, если операция, устанавливающая флаги, не была сравнением или вычитанием , что может не иметь смысла). Так что да, они разные. Если быть точным,

  • ja скачет, если CF = 0 и ZF = 0
  • jg скачки, если ZF = 0 и SF = OF

Например,

cmp eax, edx
ja somewhere ; will go "somewhere" if eax >u edx
             ; where >u is "unsigned greater than"

cmp eax, edx
jg somewhere ; will go "somewhere" if eax >s edx
             ; where >s is "signed greater than"

>u и >s соглашаются на значения с верхним битом нуль, но значения с верхним битовым набором считаются отрицательными на >s и как большой на >u (конечно, если оба операнда имеют верхний бит, >u и >s согласны снова).

25
ответ дан harold 16 August 2018 в 05:21
поделиться
  • 1
    Не могли бы вы привести мне пример? означает ли это, что JA игнорирует отрицательный знак? – user3157687 3 January 2014 в 17:16
  • 2
    @ user3157687 нет знака. Есть только флаги условий. ja игнорирует флаг знака (SF). Пример ввода .. – harold 3 January 2014 в 17:17
  • 3
    извините, но что вы подразумеваете под u, s? :) – user3157687 3 January 2014 в 17:21
  • 4
    @ user3157687 неподписанные и подписанные – harold 3 January 2014 в 17:23
  • 5
    Итак, если я скажу, например, CMP 5, -6 JA. он не будет прыгать вправо? потому что 6 & gt; 5? – user3157687 3 January 2014 в 17:26
Другие вопросы по тегам:

Похожие вопросы: