Java, равенство указателей и сравнение строк

У меня есть код C, в котором используется множество команд, идентифицируемых статическими строковыми константами.

static char* KCmdA = "commandA"
static char* KCmdB = "commandB"
static char* KCmdC = "commandC"

В CI можно сравнить две строки, например, с помощью strcmp(A, B), но поскольку я ссылаюсь на эти команды только через их статический строковый идентификатор, быстрее проверять только неравенство указателей, поскольку я знаю, что мой unknowCMD может быть только указателем на один из моих статических струны.

switch(unknowCMD)
{
    case KCmdA:
    ...
    case KCmdB:
    ...
}

Я предполагаю, что в Java эквивалентом strcmp будет метод equals:

unknowCMD.equals(KCmdA)

Есть ли эквивалент равенства указателей в Java? Я знаю, что Java использует только ссылки. Можно ли использовать эти ссылки для проверки равенства без фактического сравнения строк?

Извините, если это очевидно, я проверил документ, но не нашел окончательного ответа.


person CodeFlakes    schedule 11.07.2012    source источник


Ответы (3)


Я думаю, что так как вы используете здесь статические строки, было бы лучше использовать Enums. Вы можете сравнить их, используя .equals и ==. Вы также можете использовать перечисления в случае переключения.

person Jurgen Goris    schedule 11.07.2012
comment
Верно. Я на самом деле не использовал их, потому что где-то читал, что это не рекомендуется на Android. Но на самом деле это, вероятно, был бы лучший подход для моей проблемы. Я смогу использовать оператор switch с перечислениями. - person CodeFlakes; 11.07.2012

если вы сравниваете равенство ссылок на строки, используйте ==

if(str1==str2){

}
person Samir Mangroliya    schedule 11.07.2012

Вы можете использовать ==, но это опасно и хрупко.

Обратите внимание, что для String первое, что делает equals(), это проверяет равенство ссылок, поэтому вы не покупаете много, делая это.

person Simon Nickerson    schedule 11.07.2012
comment
вау, это был быстрый ответ. Итак, equals на самом деле не сравнивает содержимое строки, которое подходит сейчас. Это на самом деле заставляет меня думать о связанной проблеме. Как я могу использовать оператор switch для сравнения строк? - person CodeFlakes; 11.07.2012
comment
Для этого вам нужна Java SE 7. См. stackoverflow.com/questions/338206/< /а> - person mmalmeida; 11.07.2012
comment
Что ?! это только недавняя функция? Я разрабатываю для Android, поэтому я не смогу его использовать. В любом случае большое спасибо вам обоим. - person CodeFlakes; 11.07.2012