2012-02-17 2 views
2

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

NSLog(@"%@ == %@ ?",strippedString1,strippedString2); 

if (strippedString1 == strippedString2) { 
    [_newBuild setTextColor: [NSColor greenColor] ]; 
    [_OldBuild setTextColor: [NSColor greenColor] ]; 
} 

Это мой NSLog выход: Сложение: 2A12-046 == Сложение: 2A12

Даже байт сравнения байт говорит, что обе строки идентичны: enter image description here

Любые подсказки?

ответ

3

С == вы сравниваете адрес указателя, сравнить содержимое строк, которые вы могли бы использовать:

[strippedString1 isEqualToString: strippedString2]; 
+0

В дополнение к этому вы получаете постоянную фальцовку в компиляторе, поэтому иногда сравнения '==' кажутся магически полезными, а затем иногда терпят неудачу в зависимости от того, где определена строка и какие параметры компилятора вы используете. –

+0

@MichaelAnderson: wow ... так что если я пытаюсь проверить, совпадают ли 2 объекта (имеют один и тот же адрес), я могу закончить сравнение их содержимого? – whitelionV

+0

Что я пытаюсь сказать: 'const NSString s1 = @" hello "; ... NSString s2 = s1; ... if (s2 == @ "hello") {...} 'может проходить или отказываться в зависимости от настроек компилятора. '==' никогда не будет сравнивать содержимое, только местоположение, но иногда это место может быть одинаковым, если вы этого не ожидаете. Я думаю, что компилятор только сбрасывает константы строковых/базовых типов, а не общие объектные константы, но я не уверен, что это санкционировано или нет - я бы никогда не полагался на него. –

0

Я думаю, что для строки, вы должны использовать (это Java) .equals() или эквивалент.

0

Вы не можете сравнить два NSStrings с оператором ==, вместо того, чтобы использовать

[strippedString1 isEqualToString:strippedString2]; 
0

Важная часть: вы использовать isEqualToString

Использование == проверяет равенство указателя, т.е. он скажет вам, являются ли эти два объекта, которые вы сравниваете, на самом деле одним и тем же экземпляром.

Вместо этого, я думаю, вы хотели проверить, что содержимое одного и того же, но accourding к appledocs вы захотите использовать isEqualToString, когда вы знаете, что два объекта являются строками, поскольку они намного быстрее, чем isEqual.

Смежные вопросы